Wenn man Pic03 noch ein wenig nachbearbeitet, ist es ganz brauchbar.
Adventure Spiel für den C64 - Grafiker gesucht
-
Bolzgramm -
24. Juni 2022 um 00:30 -
Erledigt
Es gibt 871 Antworten in diesem Thema, welches 128.134 mal aufgerufen wurde. Der letzte Beitrag (
-
-
Wenn man Pic03 noch ein wenig nachbearbeitet, ist es ganz brauchbar.
Ich schicke Dir die 100 Bilder gerne zu.

-
Nein Danke, ich bin kein Grafiker.

-
Bolzgramm , Tobias , He-Man1982
Die d42_system.zip enthält das Skript "d42_dump.lua", welches
- gut kommentiert ist und
- die D42-Dateiformate beschreibt und
- den internen Aufbau des D42-Systems bzw. eines erstellten Adventures erahnen lässt.d42_dump.lua
Code
Alles anzeigen-- D42 dumper V1.1 strUsage = [[ Usage: lua d42_dump.lua <data dir> Create a textual dump of a d42 adventure. The data dir must contain all files of the game. ]] --MODE_HOTSPOT = true if not MODE_HOTSPOT then -- for standard games OJ_OBJ_OFFSET = 0xe03 else -- for Hotspot/32 OJ_OBJ_OFFSET = 3 end function _G.printf(...) print(string.format(...)) end _G.verbosity = 0 function _G.vbsprintf(lv, ...) if verbosity >= lv then printf(...) end end function loadFile(name) local file, msg = io.open(name, "rb") if not file then return nil end assert(file, msg) local data = file:read("*a") file:close() assert(data, "error reading file " .. name) vbsprintf(2, "file %s - %d bytes read", name, data:len()) return data end function writeFile(name, data) local file, msg = io.open(name, "wb+") assert(file, msg) file:write(data) file:close() vbsprintf(2, "file %s written - %d bytes", name, data:len()) end function depackD4(bin) local pos = 0 local function getbyte() pos = pos + 1 return bin:byte(pos) end local unpacked = {} local function putbyte(b) table.insert(unpacked, string.char(b)) end putbyte(getbyte()) -- copy load addr putbyte(getbyte()) local packbyte = getbyte() while (pos<bin:len()) do local b = getbyte() if b == packbyte then local count = getbyte() b = getbyte() if count== 0 then break end for i=1,count do putbyte(b) end else putbyte(b) end end if #unpacked < 0x1f02 then printf("unpacked room file is too short: 0x%x", #unpacked) elseif #unpacked > 0x2002 then printf("unpacked room file exceeds area: 0x%x", #unpacked) end if pos < bin:len() then printf("depackD4: End marker before EOF: pos = 0x%x, packed len = 0x%x, unpacked len = 0x%x", pos, bin:len(), #unpacked) end return table.concat(unpacked) end bit = {} function bit.band(a, b) local x=128 local c=0 while x>=1 do if a>=x and b>=x then c=c+x end a = a % x b = b % x x = x/2 end return c end -- Allgemeindaten: -- OJ/O2 Liste der Objekte -- FL Liste der Flags -- NW Objektverteilung auf Räume -- BA Allgemeinbedingungen -- Allgemeintexte -- -- Raumdaten: -- Bedingungen -- Texte -- Richtungsflags -- Musiknr. -- BA -- Adresse Inhalt -- a000-a3ff 64 Bedingungen -- a400-a4ef Allgemeintext 1 -- ... ... -- b300-b3ef Allgemeintext 16 -- OJ/O2 -- Objekte $40-$7f (File o2) -- Adresse Inhalt -- 5000-53ff Deskriptoren für Objekte $40-$7f -- Objekte $00-$37 (File oj) -- 6400-71ff Sprites für Objekte $00-$37 -- 643f, 647f Sprite-Multicolorfarben -- 7200-757f Deskriptoren für Objekte $00-$37 -- 7580-75ff frei -- NW -- Adresse Funktion -- 0c00-0c7f Objekt 0 für die R¨aume 00-7f -- ... ... -- 0f80-0?f Objekt 7 für die R¨aume 00-7f -- Objektdescriptor: -- Byte (Offset) Funktion -- 0-14 Objektname, Screencodes aufgefüllt mit Leerzeichen -- 15 Bit 0 0: Objekt kann genommen werden, 1: unbewegliches Objekt -- 15 Bit 1 0: Gegenstand, 1: Person -- 15 Bit 2 0: Hires-Sprites, 1: Multicolor-Sprite -- 15 Bit 3 reserviert -- 15 Bits 4-7 Spritefarbe -- Textcodierung: -- Hexcode Zeichen -- $00 oder $20 Space -- $1e Text-Endemarke -- $1b/$5b ä/Ä -- $1d/$5d ö/Ö -- $1c/$5c ü/Ü -- $5e ß -- $3a/$3b : / ; -- $3c/$3e < / > charset = " abcdefghijklmnopqrstuvwxyzäüö^<" -- Pfeil oben Pfeil links ..[==[ !"#$%&'()*+,-./0123456789:;<=>?]==] .. "?ABCDEFGHIJKLMNOPQRSTUVWXYZÄÜÖß" function decodechar(iChar) return charset:sub(iChar+1,iChar+1) or "?" end -- 1-based offsets function decodestring(str, iStart, iLen) assert(iStart+iLen-1 < str:len(), string.format("%d %d %d", str:len(), iStart, iLen)) iStart = iStart or 1 iLen = iLen or str:len() local chars = {} for i=iStart, iStart+iLen-1 do table.insert(chars, decodechar(str:byte(i))) end return table.concat(chars) end -- 0-14 Objektname, Screencodes aufgefüllt mit Leerzeichen -- 15 Bit 0 0: Objekt kann genommen werden, 1: unbewegliches Objekt -- 15 Bit 1 0: Gegenstand, 1: Person function getobj(objno) local bin, offset, obj if objno>=0 and objno<=0x37 then bin = game.oj offset = OJ_OBJ_OFFSET + objno*16 obj = bin:sub(offset, offset+15) elseif objno>=0x40 and objno <= 0x7f then bin = game.o2 offset = 0x03 + (objno-0x40)*16 obj = bin:sub(offset, offset+15) else return string.format(" **** Objekt $%02x **** ", objno), false, false, true end if obj then local fEmpty = false local strName = decodestring(obj, 1, 15) strName = strName:gsub("%s+$", "") if strName=="" then fEmpty = true strName = string.format("Objekt $%02x", objno) end local iAttr = obj:byte(16) local fTake = bit.band(iAttr, 1) == 0 local fPerson = bit.band(iAttr, 2) ~= 0 assert(strName) return strName, fTake, fPerson, fEmpty end end function getflag(flagno) local offset local strName local fEmpty if flagno>=0 and flagno<=0x3f then if game.fl then offset = 3 + flagno*16 strName = decodestring(game.fl, offset, 15) fEmpty = false strName = strName:gsub("%s+$", "") if strName=="" then strName = string.format("Flag %02x", flagno) fEmpty = true end else strName = string.format("Flag %02x", flagno) fEmpty = true end return strName, fEmpty end end function decodetextlines(strData, iOffset, iLines) local lines = {} local lastline = 0 for i=1, iLines do local line = decodestring(strData, iOffset, 40) line = line:gsub("%s+$", "") lines[i] = line if line:len()>0 then lastline = i end iOffset = iOffset + 40 end return lines, lastline end function printtext(iNo, strData, iOffset) local lines, lastline = decodetextlines(strData, iOffset, 6) if lastline>0 then for i=1, lastline do printf("%x%x %s", i, iNo, lines[i]) end print() end end function printroomdescription(strUnpackedRoomData) local lines, lastline = decodetextlines(strUnpackedRoomData, 3, 10) for i=1, lastline do print(lines[i]) end print() end -- trennen an *, ^, ^^ function printroomdescription_hotspot(strUnpackedRoomData) local textlen = 400 local strRaw = decodestring(strUnpackedRoomData, 3, textlen) strRaw = strRaw:gsub("%s+", " ") local lines = {} local iPos = 0 -- last word break local iLineStart = 1 -- starting position of line local iMaxlinelen = 64 -- find the next space, *, ^, ^^ -- str = word up to space, *, ... -- if it fits in the current line, append it -- otherwise, write out the current line and append to new line -- if str = *, ^, ^^, write out the current line and clear it while iPos < strRaw:len() do -- find the next break position local iStart, iEnd = strRaw:find("[%*%^ ]", iPos+1) local strBrk, strBrk2 if iStart then strBrk = strRaw:sub(iStart, iEnd) strBr2 = strRaw:sub(iStart, iEnd+1) if strBrk2 == "^^" then iEnd = iEnd +1 end else iEnd = strRaw:len() strBrk = "" end -- if break position - line start > max line len, -- break the line at the previous position if iEnd - iLineStart > iMaxlinelen then local strLine = strRaw:sub(iLineStart, iPos) table.insert(lines, strLine) iLineStart = iPos+1 end -- if the break is not a space or the end of the text has -- been reached, break the line here. if strBrk ~= " " or iEnd == strRaw:len() then local strLine = strRaw:sub(iLineStart, iEnd) table.insert(lines, strLine) iLineStart = iEnd+1 end iPos = iEnd end -- if iLineStart < strRaw:len() then -- local strLine = strRaw:sub(iLineStart, strRaw:len()) -- table.insert(lines, strLine) -- end for i, line in ipairs(lines) do print(line) end print() end function printroomdescription_hotspot__(strUnpackedRoomData) local textlen = 400 local strRaw = decodestring(strUnpackedRoomData, 3, textlen) strRaw = strRaw:gsub("%s+", " ") local lines = {} local strLine = "" local iPos = 0 -- last word break local iMaxlinelen = 64 -- find the next space, *, ^, ^^ -- str = word up to space, *, ... -- if it fits in the current line, append it -- otherwise, write out the current line and append to new line -- if str = *, ^, ^^, write out the current line and clear it while iPos < strRaw:len() do -- find the next break position local iStart, iEnd = strRaw:find("[%*%^ ]", iPos+1) local strBrk, strBrk2, strWord if iStart then print(iStart, iEnd) strBrk = strRaw:sub(iStart, iEnd) strBr2 = strRaw:sub(iStart, iEnd+1) if strBrk2 == "^^" then iEnd = iEnd +1 end else iEnd = strRaw:len() strBrk = "" end strWord = strRaw:sub(iPos+1, iEnd) -- if break position - line start > max line len, -- break the line at the previous position if strLine:len() + strWord:len() > iMaxlinelen then table.insert(lines, strLine) strLine = "" end -- append the word strLine = strLine .. strWord -- if the break is not a space or the end of the text has been reached, break the line here. if strBrk ~= " " or iEnd == strRaw:len() then table.insert(lines, strLine) strLine = "" end iPos = iEnd end for i, line in ipairs(lines) do print(line) end print() end -- Bedingungsblock -- 0 Bit 0-5 Verb -- 0 Bit 6-7 Vorgehensweise nach Ausf¨uhren der Aktionen -- 1 Objektbedingung E oder Flagbedingung -- 2 Objektbedingung B oder Flagbedingung -- 3 Objektbedingung R oder Flagbedingung -- 4-5 Aktion 1 mit Parameter -- 6-7 Aktion 2 mit Parameter -- 8-9 Aktion 3 mit Parameter -- 10-11 Aktion 4 mit Parameter -- 12-13 Aktion 5 mit Parameter -- 14-15 Aktion 6 mit Parameter -- $00-$7f Testen, ob Objekt im Befehl vorkommt -- E: im Raum oder Inventar -- B: im Besitz (Inventarobjekt) -- R: im Raum -- $80-$bf Test ob Flag gesetzt -- $c0-$fe Test ob Flag gelöscht -- $ff Test ¨uberspringen -- -- 00 Aktionen ausführen und Ende -- 10 Aktionen ausführen und weiter -- 11 Aktionen ausfphren und weiter, aber den Test -- der nächsten Bedingung überspringen verbs={ [0]= "Bedingung ungültig", [1] = "Öffne", [2] = "Verschiebe", [3] = "Ein", [4] = "Untersuche", [5] = "Benutze", [6] = "Kombiniere", [7] = "Gib", [8] = "Nimm", [9] = "Verliere", [10] = "Rede mit", [11] = "Norden", [12] = "Osten", [13] = "Süden", [14] = "Westen", [63] = "Verb egal" } VERBNO_MASK = 0x3f CONT_MASK = 0xc0 CONT_STRINGS = {[0] = "+", [0x40] = "??", [0x80] = "weiter", [0xc0] = "weiter Aktionen"} function act_msgno(iPar) local textno = iPar % 16 local lineno = (iPar - textno)/16 if lineno == 0 then return string.format("Text %d", textno) else return string.format("Text %d Zeile %d", textno, lineno) end end function act_hexno(iPar) return string.format("%02x", iPar) end actions = { [0] = {text = "----", paramfn = nil}, {text = "Gegenstand in Besitz", paramfn = getobj}, -- Objektnr. {text = "Löschen aus Besitz", paramfn = getobj}, -- Objektnr. {text = "Löschen aus Raum", paramfn = getobj}, -- Objektnr. {text = "Flag setzen", paramfn = getflag}, -- Flagname/Nr. {text = "Flag löschen", paramfn = getflag}, -- Flagname/Nr. {text = "Meldung ausgeben", paramfn = act_msgno}, -- Text x [Zeile y] {text = "Allgemeinmeldung ausgeben", paramfn = act_msgno}, -- Text x [Zeile y] {text = "Sprung zu Raum", paramfn = act_hexno}, -- Raumnr. {text = "Game Over", paramfn = act_hexno}, -- Param. {text = "Endsequenz", paramfn = nil}, {text = "Auf Button warten", paramfn = nil}, {text = "Gegenstand in Raum", paramfn = getobj}, -- Ojektnr. } function printaction(iNo, iCode, iPar) local strAct, strPar local act = actions[iCode] if act then strAct = act.text if act.paramfn then strPar = act.paramfn(iPar) or "???" end else strAct = "???" end strPar = strPar or "" printf("%02x %02x %-25s %s", iCode, iPar, strAct, strPar) end -- Fälle: -- ganze Bedingung/Aktionen sind 0 -> nur "leer" ausgeben -- Verb = 0 -> gesperrt -- Normale Bedingung empty_cond_block = string.rep(string.char(0), 16) ebrtab = {"E", "B", "R"} function printcondition(iNo, strData, iOffset) if strData:sub(iOffset, iOffset+15) == empty_cond_block then --printf("Bedingung %02x: leer", iNo) else -- Bedingungen printf("Bedingung %02x", iNo) local iByte0, iByte1, iByte2, iByte3 = strData:byte(iOffset, iOffset + 3) local iVerbNo = bit.band(iByte0, VERBNO_MASK) local objconditions = {} local flagconditions = {} local strVerb if iVerbNo ~= 0x3f then strVerb = verbs[iVerbNo] or "???????????" else strVerb = "" end if iVerbNo ~= 0 then for i=1, 3 do local cond = strData:byte(iOffset+i) if cond <= 0x7f then local strObj = getobj(cond) or "????" table.insert(objconditions, string.format("%s:%s", ebrtab[i], strObj )) elseif cond <= 0xbf then table.insert(flagconditions, getflag(cond-0x80) .. " = 1") elseif cond < 0xff then table.insert(flagconditions, getflag(cond-0xc0) .. " = 0") end end end printf("%02x %02x %02x %02x %s %s %s", iByte0, iByte1, iByte2, iByte3, strVerb, table.concat(objconditions, " "), table.concat(flagconditions, " ")) -- Aktionen iOffset = iOffset + 4 for actno = 1, 6 do local iCode, iParam = strData:byte(iOffset, iOffset+1) if iCode ~= 0 then printaction(actno, iCode, iParam) end iOffset = iOffset + 2 end local iCont = bit.band(iByte0, CONT_MASK) if iCont ~= 0 then print(CONT_STRINGS[iCont]) end print() end end function printobjmap() for roomno = 0, 127 do local objects = {} local lastslot = nil for slot = 0, 7 do local offset = 3 + 128*slot + roomno local entry = game.nw:byte(offset) local objno = bit.band(entry, 127) local sprite = bit.band(entry, 128) if objno ~= 0x7f then lastslot = slot objects[slot] = string.format("%02x %-15s %s", objno, getobj(objno), sprite == 0 and "Sprite" or " ") end end if lastslot then printf("Raum %02x:", roomno) for slot = 0, lastslot do if objects[slot] then printf(" %d %s", slot, objects[slot]) end end else --printf("Raum %02x: keine Objekte", roomno) end end end function printobjlist() for objno = 0, 0x7f do if objno < 0x38 or objno > 0x3f then local objname, fTake, fPerson, fEmpty = getobj(objno) if not fEmpty then printf("%02x %-15s %-13s %-10s", objno, objname, fTake and "tragbar" or "nicht tragbar", fPerson and "Person" or "Gegenstand") end end end end function printflaglist() for i=0, 0x3f do local strName, fEmpty = getflag(i) if not fEmpty then printf("%02x %s", i, strName) end end end -- Raumfile -- Adresse Inhalt -- 8000-81df Raumbeschreibung (12*40 Zeichen) -- 81e0 gesperrte Richtungen: -- 1 - Norden, 2 - Osten, 4 - Sueden, 8 - Westen -- 81e1 Musiknr. -- 81e2-81e9 Sprites X-Tabelle -- 81ea-81f1 Sprites Y-Tabelle -- 8200-82ef Raumtext 1 -- ... ... -- 8900-89ef Raumtext 8 -- 8a00-8bff 32 Bedingungen -- 8c00-8ddf Videoram: 12x40 Bytes -- 8e00-8fdf Colorram: 12x40 Bytes -- 8fff Hintergrundfarbe -- 9000-9eff Bitmap: 12x320 Bytes -- Varianten bei Texten: --PRINT_TEXTLIST = true --TEXT_IN_LOGIC_ALWAYS = false --TEXT_IN_LOGIC_FIRST = false function printroom(iRoomNo, strRoomData) print() print( "=========") printf("Raum %02x", iRoomNo) print( "=========") print() -- Raumbeschreibung print("Raumbeschreibung: ") if not MODE_HOTSPOT then printroomdescription(strRoomData) else printroomdescription_hotspot(strRoomData) end print() -- Raumtexte print("Texte:") for i=0, 7 do local iOffset = 0x203 + i*256 printtext(i, strRoomData, iOffset) end print() -- Bedingungen print("Bedingungen:") for i=0, 31 do local iOffset = 0xa03 + i*16 printcondition(i, strRoomData, iOffset) end print() end function printcommondata() print() print("==============") print("Allgemeindaten") print("==============") print() print("Objekte:") printobjlist() print() print("Gegenstandskarte:") printobjmap() print() print("Flags:") printflaglist() print() print("Allgemeintexte:") for i=0, 15 do printtext(i, game.ba, 0x0403 + i*256) end print() print("Allgemeinbedingungen:") for i=0, 63 do local iOffset = 3 + i*16 printcondition(i, game.ba, iOffset) end print() end function loadgame(strDir) game = {} game.ba = loadFile(strDir.."/ba") game.oj = loadFile(strDir.."/oj") game.o2 = loadFile(strDir.."/o2") game.nw = loadFile(strDir.."/nw") game.fl = loadFile(strDir.."/fl") game.rooms = {} for iRoomNo = 0, 127 do local strFile = string.format("%02x", iRoomNo) local strPackedRoomData = loadFile(strDir .. "/" ..strFile) if strPackedRoomData then local strRoomData = depackD4(strPackedRoomData) game.rooms[iRoomNo] = strRoomData end end end -- 1 Norden, 2 Osten, 4 Süden, 8 Westen gesperrt directionflags = { [0] = "NOSW", " OSW", "N SW", " SW", "NO W", " O W", "N W", " W", "NOS ", " OS ", "N S ", " S ", "NO ", " O ", "N ", " "} function getroommatrixcell(iRoomNo, strRoomData) local iDir = strRoomData:byte(3 + 0x01e0) local iMus = strRoomData:byte(3 + 0x01e1) return { string.format(" %02x ", iRoomNo), string.format (" %02x ", iMus), directionflags[iDirFlags] .. " " } end function getroommatrixcell(iRoomNo, strRoomData) local iDir = strRoomData:byte(3 + 0x01e0) local iMus = strRoomData:byte(3 + 0x01e1) local strN = bit.band(iDir, 1)==0 and "+ +" or "+--+" local strO = bit.band(iDir, 2)==0 and " " or "|" local strS = bit.band(iDir, 4)==0 and "+ +" or "+--+" local strW = bit.band(iDir, 8)==0 and " " or "|" local strRoom = string.format("%02x", iRoomNo) local strMus = string.format("%02x", iMus) return { strN, strW .. strRoom .. strO, strW .. strMus .. strO, strS } end function printroommatrix() local ROWS = 4 local COLS = 4 local emptystring=string.rep(" ", COLS) for y = 0, 7 do local fLine = false local lines = {} for i=1, ROWS do lines[i] = {} end for x = 0, 15 do local iRoomNo = 16*y + x local strRoomData = game.rooms[iRoomNo] if strRoomData then local astr = getroommatrixcell(iRoomNo, strRoomData) for i=1, ROWS do table.insert(lines[i], astr[i]) end fLine = true else for i=1, ROWS do table.insert(lines[i], emptystring) end end end if fLine then for i=1, ROWS do print(table.concat(lines[i])) end else print() end end end if #arg ~= 1 then print (strUsage) os.exit(1) else loadgame(arg[1]) printcommondata() print("Räume:") printroommatrix() -- Räume ausgeben for iRoomNo = 0, 127 do if game.rooms[iRoomNo] then local strRoomData = game.rooms[iRoomNo] printroom(iRoomNo, strRoomData) end end endAusgabe des Skripts 'd42_dump.lua' für das DT100-Adventure (Achtung: Lösungsweg ablesbar!)
Code
Alles anzeigen============== Allgemeindaten ============== Objekte: 00 Torbogen nicht tragbar Gegenstand 01 Feuer nicht tragbar Gegenstand 02 Späher nicht tragbar Person 03 Meer nicht tragbar Gegenstand 04 steiniger Weg nicht tragbar Gegenstand 05 Plakat tragbar Gegenstand 06 Steg nicht tragbar Gegenstand 07 Sternenhimmel nicht tragbar Gegenstand 08 Schild nicht tragbar Gegenstand 09 Tür nicht tragbar Gegenstand 0a SCUMM BAR tragbar Gegenstand 0b Fieser Pirat tragbar Person 0c Düsterer Pirat tragbar Person 0d Seltsamer Pirat tragbar Person 0e Kronleuchter nicht tragbar Gegenstand 0f Piratenhund tragbar Person 10 Anstecker tragbar Gegenstand 11 VIP-Piraten tragbar Person 12 Kamin nicht tragbar Gegenstand 13 Küchentür nicht tragbar Gegenstand 14 Blauer Pirat tragbar Person 15 Grüner Pirat tragbar Person 16 Schwarzer Pirat tragbar Person 17 Fleisch tragbar Gegenstand 18 Topf tragbar Gegenstand 19 Fisch tragbar Gegenstand 1a Möwe nicht tragbar Gegenstand 1b Planke nicht tragbar Gegenstand 1c Eintopf nicht tragbar Gegenstand 1d Fleischeintopf tragbar Gegenstand 1e Fischeintopf tragbar Gegenstand 1f Tisch nicht tragbar Gegenstand 20 Ofen nicht tragbar Gegenstand 21 Koch tragbar Person 22 Bürger tragbar Person 23 Uhr nicht tragbar Gegenstand Gegenstandskarte: Raum 01: 0 00 Torbogen Sprite 1 01 Feuer Sprite 2 02 Späher Sprite 3 03 Meer Sprite Raum 02: 0 0b Fieser Pirat Sprite 1 0c Düsterer Pirat Sprite 2 0d Seltsamer Pirat Sprite 3 0e Kronleuchter Sprite 4 0f Piratenhund Sprite Raum 03: 0 11 VIP-Piraten Sprite 1 12 Kamin Sprite 2 13 Küchentür Sprite Raum 04: 0 09 Tür Sprite 1 1f Tisch Sprite 2 20 Ofen Sprite Raum 10: 0 14 Blauer Pirat Sprite 1 15 Grüner Pirat Sprite 2 16 Schwarzer Pirat Sprite Raum 11: 0 04 steiniger Weg Sprite 1 05 Plakat Sprite 2 06 Steg Sprite 3 07 Sternenhimmel Sprite Raum 12: 0 08 Schild Sprite 1 0a SCUMM BAR Sprite 2 09 Tür Sprite Raum 13: 0 22 Bürger Sprite 1 00 Torbogen Sprite 2 23 Uhr Sprite Flags: 06 Koch aus Küche 07 Tisch 1x unters 08 Tisch 2x unters 09 Eintopf erstell 0a Steg zugänglich 0b Möwe erstellt 0c Planke erstellt 0d Möwe vertrieben Allgemeintexte: Allgemeinbedingungen: Räume: + ++--++--++--++--+ 00 |01||02 03 04| 00 |11||31 41 51| + ++ ++ ++--++--+ +--++ ++ ++--+ 10||11 12 13 41||21 71 61 +--++--++--++--+ ========= Raum 00 ========= Raumbeschreibung: Texte: 10 20 Tief in der Karibik... 30 40 ... die Insel Melee Island. 50 60 "Ich verfluchte nochmals mein Schicksal, 11 als ich mich in die Kehle des steinernen 21 Affen hinablies. Sind meine Träume vom 31 Plündern reicher Galeonen, von Schätzen 41 und Abenteuern derart zerplatzt? "Drei 51 kleine Prüfungen, dann gehörst du zu 61 uns!", haben sie gesagt. Das klang fair. 12 Wenn ich nur dieses seltsame Zeug run- 22 terkriegen würde, das diese Männer der 32 See in sich hineinschütten. Wie konnte 42 ich denn ahnen, dass ich eine mächtige 52 und schöne Frau treffen würde, mit einem 62 Geliebten, der vor lauter Eifersucht 13 nicht bemerkt, dass er schon mehrere 23 Jahre tot ist? Und jetzt krabble ich 33 durch die Eingeweide des steinernen 43 Affen, auf der Suche nach einem Mann, 53 der drei Zentimeter über dem Boden 63 schwebt und jeden Morgen seinen Bart 14 anzündet..." 24 34 (Auszug aus den Memoiren von Guybrush 44 Threepwood, "Meine Jahre auf Monkey 54 Island") 15 25 THE SECRET OF MONKEY ISLAND 35 45 55 (C) & (TM) by LUCASFILM GAMES 16 26 Monkey Island 64 - Demo 36 46 Programm: D42 - Adventure System 56 von Out of Order Softworks 17 Grafikkonversion: Project One 27 von Resource 37 47 Musiken: Smalltown Boy (Title Theme) & 57 Oedipus (Monkey Madness) Bedingungen: Bedingung 00 00 00 00 00 Bedingung ungültig 08 01 Sprung zu Raum 01 ========= Raum 01 ========= Raumbeschreibung: Du betrittst den höchsten Punkt von Melee Island, den Platz des Sehers. Ein Feuer brennt und wärmt den erfahre- nen Wachtposten, der westwärts auf das Meer hinaus blickt. Im Süden siehst du einen Torbogen, durch den du über ca. 351 Stufen zum Hafen gehen kannst. Texte: 10 Ein schöner, steinerner Torbogen. Wenn 20 ich durch ihn gehe, könnte ich zum Hafen 30 gelangen.^ 40 Dieses heiß lodernde Feuer wärmt diesen 50 Späher dort drüben.^ 60 Ist der Späher etwa blind?^ 11 "Hallo! Mein Name ist Guybrush Threep- 21 wood und ich will Pirat werden." 31 "Huch!", erschreckt sich der Späher. 41 "Schleich dich nicht so an mich ran!" 51 "Äh... hier stehe ich", korrigierst du 61 den Seher, der dich nun anblickt. 12 "Nun, Thriftweed" - "Threepwood!" - "Ach 22 so. Also du willst Pirat werden, wie? Du 32 siehst eher wie ein Buchhalter aus. Aber 42 wenn das mit der Piraterie wirklich 52 ernst gemeint war, sprich mit den Anfüh- 62 rern. Du findest sie unten in der Scumm 13 Bar." - "Hey, danke", entgegnest du. Das 23 werde ich gleich tun! Ich gehe und suche 33 mein Glück!" - "Viel Glück", entgegnet 43 der alte Mann.^ 53 Wow, das Meer. So weit das Auge reicht. 63 Zeit, dass ich auf ein Schiff komme.^ 14 "Äh... wo sind nochmal diese Piraten- 24 Anführer?", fragst du erneut den Späher. 34 "In der SCUMM BAR", antwortet er dir ge- 44 nervt und blickt wieder aufs Wasser.^ Bedingungen: Bedingung 00 04 ff ff 00 Untersuche R:Torbogen 06 10 Meldung ausgeben Text 0 Zeile 1 Bedingung 01 04 ff ff 01 Untersuche R:Feuer 06 40 Meldung ausgeben Text 0 Zeile 4 Bedingung 02 04 ff ff 02 Untersuche R:Späher 06 60 Meldung ausgeben Text 0 Zeile 6 Bedingung 03 0a 02 ff 80 Rede mit E:Späher Flag 00 = 1 06 14 Meldung ausgeben Text 4 Zeile 1 Bedingung 04 0a ff ff 02 Rede mit R:Späher 06 01 Meldung ausgeben Text 1 06 02 Meldung ausgeben Text 2 06 13 Meldung ausgeben Text 3 Zeile 1 04 00 Flag setzen Flag 00 Bedingung 05 04 ff ff 03 Untersuche R:Meer 06 53 Meldung ausgeben Text 3 Zeile 5 ========= Raum 02 ========= Raumbeschreibung: Die heillos überfüllte SCUMM BAR hat die ganzen verwegenen Gestalten der Karibik angelockt. Der Geruch von Grog gemischt mit den Körpergerüchen der Haudegen ver- mittelt ein seltsames Gefühl. Irgendwie kommt es dir auf eigenartige Weise so vor, als seist du endlich zu Hause angekommen. Südlich geht es an die Luft und im Osten tiefer in die SCUMM BAR. Texte: 10 Sieht ganz schön fies aus.^ 20 Sieht ganz schön düster aus.^ 30 Sieht ganz schön seltsam aus. Der Pirat 40 hat einen Anstecker an seinem schmutzi- 50 gen Hemd.^ 60 Selbst der Hund sieht gefährlich aus.^ 11 Auf dem Anstecker steht: "Frag mich nach 21 Loom (TM)!".^ 31 Ich sollte mir den Piraten genauer an- 41 sehen, bevor ich ihn anspreche.^ 51 "Grrr", macht der Hund. Du antwortest 61 ihm: "Grrr... Wufff". Tolles Gespräch.^ 12 Nein, ich will jetzt kein Gespräch über 22 ein Computerspiel führen, das ohnehin 32 nicht für den C64 umgesetzt wurde.^ 42 Lass dem Piraten besser den Anstecker!^ 52 Auf dem Kronleuchter rotieren zwei Pira- 62 ten wie wild im Kreis. Toll!^ 13 "Hey, mein Name ist Guybrush Threepwood 23 und ich möchte Pirat werden", sprichst 33 du den Piraten an. Dieser entgegnet: "Da 43 kann ich dir nicht weiterhelfen. Sprich 53 mit den schrecklich wichtigen Piraten!". Bedingungen: Bedingung 00 04 ff ff 0b Untersuche R:Fieser Pirat 06 10 Meldung ausgeben Text 0 Zeile 1 Bedingung 01 04 ff ff 0c Untersuche R:Düsterer Pirat 06 20 Meldung ausgeben Text 0 Zeile 2 Bedingung 02 04 0d ff 82 Untersuche E:Seltsamer Pirat Flag 02 = 1 06 30 Meldung ausgeben Text 0 Zeile 3 Bedingung 03 04 ff ff 0d Untersuche R:Seltsamer Pirat 06 30 Meldung ausgeben Text 0 Zeile 3 0c 10 Gegenstand in Raum Anstecker 04 02 Flag setzen Flag 02 Bedingung 04 04 ff ff 0f Untersuche R:Piratenhund 06 60 Meldung ausgeben Text 0 Zeile 6 Bedingung 05 0a ff ff 0f Rede mit R:Piratenhund 06 51 Meldung ausgeben Text 1 Zeile 5 Bedingung 06 0a 0d ff 82 Rede mit E:Seltsamer Pirat Flag 02 = 1 06 12 Meldung ausgeben Text 2 Zeile 1 Bedingung 07 0a ff ff 0d Rede mit R:Seltsamer Pirat 06 31 Meldung ausgeben Text 1 Zeile 3 Bedingung 08 04 ff ff 0e Untersuche R:Kronleuchter 06 52 Meldung ausgeben Text 2 Zeile 5 Bedingung 09 08 ff ff 10 Nimm R:Anstecker 06 42 Meldung ausgeben Text 2 Zeile 4 Bedingung 0a 0a ff ff 0b Rede mit R:Fieser Pirat 06 03 Meldung ausgeben Text 3 Bedingung 0b 0a ff ff 0c Rede mit R:Düsterer Pirat 06 03 Meldung ausgeben Text 3 Bedingung 0c 04 ff ff 10 Untersuche R:Anstecker 06 11 Meldung ausgeben Text 1 Zeile 1 ========= Raum 03 ========= Raumbeschreibung: Hinter einem Vorhang, getrennt vom Rest der Schänke, befindet sich der hintere Teil der SCUMM BAR. Hier ist weniger Rummel. Westlich geht es zurück zum prallen Piratenleben. Im Osten befindet sich eine Tür. Texte: 10 Drei wohlbeleibte grogtrinkende Piraten. 20 Sie sehen schrecklich wichtig aus.^ 30 Gemütlich.^ 40 Die Tür hat ein Bullauge. Du kannst eine 50 ranzige Küche sehen, Über der Tür ist 60 ein Totenkopf gemalt. Zutritt verboten!^ 11 Du sprichst die schrecklich wichtigen 21 Piraten an. 31 "Was willst du, Bursche?", entgegnet man 41 dir. -"Ich will Pirat werden." -"Na und? 51 Warum uns damit belästigen?", will man 61 dich abwimmeln. Der dritte Pirat im 12 Bunde wirft ein: "Hey, vergesst nicht, 22 wegen der LeChuck-Geschichte könnten wir 32 etwas Hilfe gebrauchen." Eine Diskussion 42 entbrennt: "Wieso?" -"Keine Piraten be- 52 deutet keine Beute, keine Beute bedeutet 62 keinen Grog und der Grog geht uns lang- 13 sam aus...". Schließlich wendet man sich 23 wieder an dich: "Hmmm, hast du besondere 33 Fähigkeiten?" -"Ich kann zehn Minuten 43 die Luft anhalten!", protzt du. "Nun... 53 Na gut, aber man wird nicht einfach 63 Pirat, weil man danach fragt... 14 Du musst durch... DIE DREI PRÜFUNGEN!".^ 24 "Äh, was sind das für Prüfungen?", 34 fragst du die Piraten. Man erklärt dir: 44 "Es gibt drei Dinge, die jeder Pirat 54 beherrschen muss. Du musst fechten 64 lernen...^ 15 ... die Kunst des Diebstahls anwenden... 25 ... und dich auf die Suche begeben." 35 -"Die was?" -"Die Schatzsuche, alter 45 Dummkopf!" -"Richtig, du musst dich in 55 jedem dieser Fachgebiete beweisen und 65 uns ein Beweismittel mitbringen. Und 16 dann musst du mit uns Grog trinken. GROG 26 !!! GROG!!! GROG!!!^ 36 Verwirrt beschließt du, nach Details zu 46 fragen.^ 56 Gerade kommt der Koch aus der Küche.^ 66 Der Koch geht wieder in die Küche.^ 17 Noch befindet sich der Koch im vorderen 27 Teil der SCUMM BAR und ist beschäftigt.^ 37 Als du die Küche betreten willst, kommt 47 der Koch dir entgegen. "Verschwinde!".^ 57 Schnell gehst du durch die offene Tür in 67 die Küche.^ Bedingungen: Bedingung 00 01 13 ff 86 Öffne E:Küchentür Koch aus Küche = 1 06 57 Meldung ausgeben Text 7 Zeile 5 08 04 Sprung zu Raum 04 Bedingung 01 3f ff ff 86 Koch aus Küche = 1 06 66 Meldung ausgeben Text 6 Zeile 6 05 06 Flag löschen Koch aus Küche 03 21 Löschen aus Raum Koch Bedingung 02 04 ff ff 11 Untersuche R:VIP-Piraten 06 10 Meldung ausgeben Text 0 Zeile 1 Bedingung 03 0a 11 ff 84 Rede mit E:VIP-Piraten Flag 04 = 1 06 36 Meldung ausgeben Text 6 Zeile 3 04 05 Flag setzen Flag 05 08 10 Sprung zu Raum 10 Bedingung 04 0a 11 ff 83 Rede mit E:VIP-Piraten Flag 03 = 1 06 24 Meldung ausgeben Text 4 Zeile 2 06 05 Meldung ausgeben Text 5 06 16 Meldung ausgeben Text 6 Zeile 1 04 04 Flag setzen Flag 04 Bedingung 05 0a ff ff 11 Rede mit R:VIP-Piraten 06 01 Meldung ausgeben Text 1 06 02 Meldung ausgeben Text 2 06 03 Meldung ausgeben Text 3 06 14 Meldung ausgeben Text 4 Zeile 1 04 03 Flag setzen Flag 03 Bedingung 06 04 ff ff 12 Untersuche R:Kamin 06 30 Meldung ausgeben Text 0 Zeile 3 Bedingung 07 04 13 ff 86 Untersuche E:Küchentür Koch aus Küche = 1 06 40 Meldung ausgeben Text 0 Zeile 4 Bedingung 08 04 ff ff 13 Untersuche R:Küchentür 06 40 Meldung ausgeben Text 0 Zeile 4 06 56 Meldung ausgeben Text 6 Zeile 5 04 06 Flag setzen Koch aus Küche 0c 21 Gegenstand in Raum Koch Bedingung 09 04 ff ff 21 Untersuche R:Koch 06 17 Meldung ausgeben Text 7 Zeile 1 Bedingung 0a 01 ff ff 13 Öffne R:Küchentür 06 37 Meldung ausgeben Text 7 Zeile 3 Bedingung 0b 0c ff ff c6 Osten Koch aus Küche = 0 06 37 Meldung ausgeben Text 7 Zeile 3 ========= Raum 04 ========= Raumbeschreibung: Unbemerkt betrittst du die Küche der SCUMM BAR. Ein offensichtlich heiliger Raum. Zumindest herrscht hier ziemliche Unordnung. Echte Piraten stören sich nicht an diesen Zuständen. Eine Tür im Osten weist den Weg zu einem Steg. Im Westen geht es zurück zu den Schankräumen. Texte: 10 Auf dem Tisch liegt ein Stück rohes 20 Fleisch.^ 30 Unter dem Tisch liegt ein Topf.^ 40 Ein schmutziger Tisch. Sonst nichts.^ 50 Heiß... Dort köchelt ein Eintopf.^ 11 Ein Eintopf ohne besondere Zutaten.^ 21 Aua... Der Topf ist viel zu heiß.^ 31 Du öffnest die östliche Tür zum Steg.^ 41 Nochmal?^ 51 Da liegt ein Fisch auf dem Steg.^ 61 Die Möwe knabbert am Fisch.^ 12 Am äußeren Ende des Stegs scheint eine 22 Planke lose zu sein.^ 32 Die Möwe hat den Fisch in Beschlag ge- 42 nommen. Sie würde dir die Finger zer- 52 hacken.^ 62 Schnell nimmst du den Fisch an dich.^ 13 Mit voller Kraft trittst du auf die lose 23 Planke. Die Möwe, die am anderen Ende 33 der Planke sitzt, schreckt auf und 43 flattert in die Lüfte.^ 53 Die Möwe kehrt zum Fisch zurück.^ 63 Aua, ist dieser Eintopf heiß.^ 14 Du wirfst das Fleisch in den Eintopf.^ 24 Du wirfst den Fisch in den Eintopf.^ Bedingungen: Bedingung 00 08 19 ff 8d Nimm E:Fisch Möwe vertrieben = 1 06 62 Meldung ausgeben Text 2 Zeile 6 03 19 Löschen aus Raum Fisch 01 19 Gegenstand in Besitz Fisch 03 1a Löschen aus Raum Möwe 03 1b Löschen aus Raum Planke 05 0d Flag löschen Möwe vertrieben Bedingung 01 3f ff ff 8d Möwe vertrieben = 1 06 53 Meldung ausgeben Text 3 Zeile 5 05 0d Flag löschen Möwe vertrieben Bedingung 02 04 1f ff 88 Untersuche E:Tisch Tisch 2x unters = 1 06 40 Meldung ausgeben Text 0 Zeile 4 Bedingung 03 04 1f ff 87 Untersuche E:Tisch Tisch 1x unters = 1 06 30 Meldung ausgeben Text 0 Zeile 3 04 08 Flag setzen Tisch 2x unters 0c 18 Gegenstand in Raum Topf Bedingung 04 04 ff ff 1f Untersuche R:Tisch 06 10 Meldung ausgeben Text 0 Zeile 1 04 07 Flag setzen Tisch 1x unters 0c 17 Gegenstand in Raum Fleisch Bedingung 05 04 89 ff 20 Untersuche R:Ofen Eintopf erstell = 1 06 50 Meldung ausgeben Text 0 Zeile 5 Bedingung 06 04 ff ff 20 Untersuche R:Ofen 06 50 Meldung ausgeben Text 0 Zeile 5 04 09 Flag setzen Eintopf erstell 0c 1c Gegenstand in Raum Eintopf Bedingung 07 04 ff ff 1c Untersuche R:Eintopf 06 11 Meldung ausgeben Text 1 Zeile 1 Bedingung 08 08 ff ff 1c Nimm R:Eintopf 06 21 Meldung ausgeben Text 1 Zeile 2 Bedingung 09 01 ff ff 09 Öffne R:Tür 06 31 Meldung ausgeben Text 1 Zeile 3 04 0a Flag setzen Steg zugänglich 0c 06 Gegenstand in Raum Steg 03 09 Löschen aus Raum Tür Bedingung 0a 04 06 ff 8c Untersuche E:Steg Planke erstellt = 1 06 51 Meldung ausgeben Text 1 Zeile 5 06 61 Meldung ausgeben Text 1 Zeile 6 06 12 Meldung ausgeben Text 2 Zeile 1 Bedingung 0b 04 06 ff 8b Untersuche E:Steg Möwe erstellt = 1 06 51 Meldung ausgeben Text 1 Zeile 5 06 61 Meldung ausgeben Text 1 Zeile 6 06 12 Meldung ausgeben Text 2 Zeile 1 03 06 Löschen aus Raum Steg 04 0c Flag setzen Planke erstellt 0c 1b Gegenstand in Raum Planke Bedingung 0c 04 06 ff 8a Untersuche E:Steg Steg zugänglich = 1 06 51 Meldung ausgeben Text 1 Zeile 5 0c 19 Gegenstand in Raum Fisch 04 0b Flag setzen Möwe erstellt 0c 1a Gegenstand in Raum Möwe Bedingung 0d 04 ff ff 1a Untersuche R:Möwe 06 61 Meldung ausgeben Text 1 Zeile 6 Bedingung 0e 08 ff ff 19 Nimm R:Fisch 06 32 Meldung ausgeben Text 2 Zeile 3 Bedingung 0f 04 ff ff 1b Untersuche R:Planke 06 12 Meldung ausgeben Text 2 Zeile 1 Bedingung 10 02 ff ff 1b Verschiebe R:Planke 06 13 Meldung ausgeben Text 3 Zeile 1 04 0d Flag setzen Möwe vertrieben Bedingung 11 06 ff 17 1c Kombiniere B:Fleisch R:Eintopf 02 17 Löschen aus Besitz Fleisch 03 1c Löschen aus Raum Eintopf 0c 1d Gegenstand in Raum Fleischeintopf 06 14 Meldung ausgeben Text 4 Zeile 1 Bedingung 12 08 ff ff 1d Nimm R:Fleischeintopf 06 63 Meldung ausgeben Text 3 Zeile 6 03 1d Löschen aus Raum Fleischeintopf 01 1d Gegenstand in Besitz Fleischeintopf 0c 1c Gegenstand in Raum Eintopf Bedingung 13 06 ff 19 1c Kombiniere B:Fisch R:Eintopf 02 19 Löschen aus Besitz Fisch 03 1c Löschen aus Raum Eintopf 0c 1e Gegenstand in Raum Fischeintopf 06 24 Meldung ausgeben Text 4 Zeile 2 Bedingung 14 08 ff ff 1e Nimm R:Fischeintopf 06 63 Meldung ausgeben Text 3 Zeile 6 03 1e Löschen aus Raum Fischeintopf 01 1e Gegenstand in Besitz Fischeintopf 0c 1c Gegenstand in Raum Eintopf ========= Raum 10 ========= Raumbeschreibung: Du beschließt, noch mehr über die drei Prüfungen herauszufinden und sprichst die drei schrecklich wichtigen Piraten erneut an. Durch eine winzige Bewegung nach Westen kannst du dich wieder ein wenig von diesen furchteinflößenden Piraten entfernen. Texte: 10 "Erzähl mir mehr über die Fechterei". 20 Der blaue Pirat erklärt: "Zuerst 30 brauchst du ein Schwert. Dann musst du 40 den Schwertmeister finden und besiegen. 50 Jemand in der Stadt wird dir den Weg 60 zeigen können. Oh. Du solltest vorher 11 mit jemandem trainieren." "Haha!", lacht 21 der Pirat in schwarz. "Stell dir vor, 31 ohne Training gegen den Schwertmeister 41 anzutreten!". Die schrecklich wichtigen 51 Piraten lachen lauthals: "Har Har Har 61 Har Har!". 12 "Erzähl mir mehr über die Kunst des 22 Diebstahls", bittest du den anderen Pi- 32 raten. Dieser entgegnet: "Ich hätte 42 gerne, dass du uns eine Kleinigkeit be- 52 schaffst. Das Idol der Vielen Hände, das 62 am Sitz des Gouverneurs versteckt ist!". 13 Der Pirat in schwarz ergänzt: "Die Gou- 23 verneurin hat das Idol der Vielen Hände 33 in ihrem Landsitz. Natürlich musst du 43 zuerst an den Wachen vorbei. Am kniff- 53 ligsten ist es wohl, die Hunde draußen 63 zu überlisten. Die sind ziemlich bissig. 14 Man sollte sie irgendwie betäuben."^ 24 "Erzähl mir mehr über die Schatzsuche", 34 bittest du schließlich den Piraten in 44 schwarz. "Die Legenden sagen, dass ein 54 Schatz auf dieser Insel vergraben ist.^ 64 "Ich geh dann mal wieder."^ 15 Du musst lediglich den Verlorenen Schatz 25 von Melee Island (TM) finden und hierher 35 bringen." 45 "Brauche ich dazu eine Karte oder 55 sowas?", fragst du die Piraten. 65 "Du wirst wohl nicht annehmen, den 16 Schatz einfach so zu finden?", entgegnet 26 man dir. Ein anderer der VIP-Piraten er- 36 gänzt: "Und nicht vergessen: Ein X mar- 46 kiert die Stelle!".^ 56 "Har Har Har Har", lachen die drei 66 schrecklich wichtigen Piraten.^ Bedingungen: Bedingung 00 0e ff ff ff Westen 06 64 Meldung ausgeben Text 4 Zeile 6 08 03 Sprung zu Raum 03 Bedingung 01 0a ff ff 14 Rede mit R:Blauer Pirat 06 00 Meldung ausgeben Text 0 06 01 Meldung ausgeben Text 1 Bedingung 02 0a ff ff 15 Rede mit R:Grüner Pirat 06 02 Meldung ausgeben Text 2 06 03 Meldung ausgeben Text 3 06 14 Meldung ausgeben Text 4 Zeile 1 Bedingung 03 0a ff ff 16 Rede mit R:Schwarzer Pirat 06 24 Meldung ausgeben Text 4 Zeile 2 06 05 Meldung ausgeben Text 5 06 16 Meldung ausgeben Text 6 Zeile 1 06 56 Meldung ausgeben Text 6 Zeile 5 ========= Raum 11 ========= Raumbeschreibung: Du bist an dem kleinen Hafen von Melee Island angekommen. Meer soweit das Auge reicht. Nördlich kannst du zum Seher zurück- kehren. Östlich gelangst du über einen Steg weiter in Richtung Zentrum der Insel. Texte: 10 Wow, diesen gefährlichen Weg bin ich vom 20 Seher hier hinunter gelaufen. In nur 30 fünf Stunden. Reife Leistung. Ohne Not 40 will ich den nicht auch noch hoch lauf- 50 en.^ 60 Ganz schön wackelig.^ 11 An einem kleinen Dockhaus wurde ein Pla- 21 kat angebracht. "Wählen Sie Gouverneurin 31 Marley: Es gibt nur einen Kandidaten, 41 also fällt die Wahl nicht schwer!".^ 51 Die Wahlkämpfer haben nicht mit Kleber 61 gegeizt. Das Plakat bleibt am Haus.^ 12 Wirklich Überwältigend dieser Anblick.^ Bedingungen: Bedingung 00 04 ff ff 04 Untersuche R:steiniger Weg 06 10 Meldung ausgeben Text 0 Zeile 1 Bedingung 01 04 ff ff 05 Untersuche R:Plakat 06 11 Meldung ausgeben Text 1 Zeile 1 Bedingung 02 08 ff ff 05 Nimm R:Plakat 06 51 Meldung ausgeben Text 1 Zeile 5 Bedingung 03 04 06 ff ff Untersuche E:Steg 06 60 Meldung ausgeben Text 0 Zeile 6 Bedingung 04 04 ff ff 07 Untersuche R:Sternenhimmel 06 12 Meldung ausgeben Text 2 Zeile 1 ========= Raum 12 ========= Raumbeschreibung: Du näherst dich dem Zentrum der Insel, dem größten Ort von Melee Island. Direkt und ganz nahe am Wasser gebaut wurde eine Bar, die ungemein einladend aussieht. Nördlich könntest du sie betreten. Westlich geht es zum Steg, östlich tiefer in die Stadt. Texte: 10 "SCUMM BAR" steht dort auf einem ver- 20 witterten Holzschild. Welch wohlklingen- 30 der Name.^ 40 Die Tür zur Bar.^ 50 Hell beleuchtet steht sie dort, direkt 60 am Meer. Die SCUMM BAR.^ 11 Aber die ist bereits offen, die Tür!^ 21 Mit leicht zittrigen Händen öffnest du 31 die Tür zur SCUMM BAR.^ 41 Glaub es oder nicht, es gibt eine Tür.^ 12 Voller Elan betrittst du die SCUMM BAR, 22 um doch nur gegen die geschlossene Tür 32 zu laufen. Was ein Pirat alles selber 42 machen muss...^ Bedingungen: Bedingung 00 04 ff ff 08 Untersuche R:Schild 06 10 Meldung ausgeben Text 0 Zeile 1 Bedingung 01 04 ff ff 09 Untersuche R:Tür 06 40 Meldung ausgeben Text 0 Zeile 4 Bedingung 02 04 ff ff 0a Untersuche R:SCUMM BAR 06 50 Meldung ausgeben Text 0 Zeile 5 Bedingung 03 01 09 ff 81 Öffne E:Tür Flag 01 = 1 06 11 Meldung ausgeben Text 1 Zeile 1 Bedingung 04 01 ff ff 09 Öffne R:Tür 06 21 Meldung ausgeben Text 1 Zeile 2 04 01 Flag setzen Flag 01 Bedingung 05 01 ff ff 0a Öffne R:SCUMM BAR 06 41 Meldung ausgeben Text 1 Zeile 4 Bedingung 06 0b ff ff c1 Norden Flag 01 = 0 06 12 Meldung ausgeben Text 2 Zeile 1 ========= Raum 13 ========= Raumbeschreibung: Du betrittst die größte Stadt auf Melee Island. Durch einen großen Torbogen im Westen kannst du in Richtung der SCUMM BAR gehen. Im Osten geht es weiter in Richtung Stadtzentrum. Texte: 10 Schreibst du die Vollversion?^ 11 Der Bürger von Melee Island sieht mit 21 seinem Trenchcoat und dem ständigen Um- 31 drehen nach Links und Rechts sehr unauf- 41 fällig aus. 12 Dankbar entreißt er dir Topf und 22 schlingt den Inhalt hastig hinunter. 32 Dann besieht er dich genauer: 42 "Entschuldigen Sie, haben Sie einen Vet- 52 ter namens Sven...?" 13 Was, schon so spät und ich bin immer 23 noch nicht Pirat! 14 Wirklich sehr schön. 15 Immer noch hastig in Bewegung, kommt er 25 dir zuvor und fragt nervös: 35 "Sagen Sie mal, junger Freund, hätten 45 Sie vielleicht einen kleinen Snack für 55 mich?" 16 "Das ist nett gemeint, guter Junge, aber 26 als Pesco-Vegetarier muss ich dies 36 leider streng ablehnen!" 46 Sein Magen gibt ein beeindruckend lautes 56 Grummeln von sich. Bedingungen: Bedingung 00 0c ff ff ff Osten 06 10 Meldung ausgeben Text 0 Zeile 1 Bedingung 01 04 ff ff 22 Untersuche R:Bürger 06 01 Meldung ausgeben Text 1 Bedingung 02 0a ff ff 22 Rede mit R:Bürger 06 05 Meldung ausgeben Text 5 Bedingung 03 04 ff ff 23 Untersuche R:Uhr 06 03 Meldung ausgeben Text 3 Bedingung 04 04 ff ff 00 Untersuche R:Torbogen 06 04 Meldung ausgeben Text 4 Bedingung 05 07 ff 1d ff Gib B:Fleischeintopf 06 06 Meldung ausgeben Text 6 Bedingung 06 07 ff 1e ff Gib B:Fischeintopf 06 02 Meldung ausgeben Text 2 0a 00 EndsequenzEs wäre also evtl. nicht zu abwägig die "Game-Engine", so gut wie möglich bzw. es die eigenen Fähigkeiten hergeben, nachzuprogrammieren.
Alternativ könnte ein Cracker vielleicht den Einsprungspunkt zum Anzeigen einer Raumgrafik finden und auf eine eigene Routine umleiten, welche den benötigten Speicher auslagert/rettet und ein Bild in einem besseren Format nachlädt und anzeigt. ( He-Man1982 hattest Du ja bereits vorgeschlagen. Die Kommentare im Skript könnten jemanden diesen Vorgang erleichtern. Schwierig würde ich mir die Nutzung der vorhandenen Loader-Routinen vorstellen...)
----
Die Nachprogrammierung würde ich bevorzugen, wenn man alles auf einem einfachen/primitiven Niveau belässt.
Die Linie würde ich folgendermaßen ziehen:
Die Daten aus dem D42-System dürfen nicht verändert oder ergänzt werden, d.h. die neue "Game-Engine" würde/müsste auch mit allen anderen bereits erstellten/zukünftigen Adventures arbeiten können. Bolzgramm
Die neuen Bilder würden einfach am Dateinamen (bspw. Prefix + Raumnummer o.ä.) erkennbar/auffindbar sein.
Die Verbesserungen könnten im Detail sein:
- Oben die Grafik in 160x144 MC anzeigen
-- In dieser Vorstellungen sprechen viele Gründe diesmal für MC. (*)
- Die Bedienung unten in Hires und Proportionalfont, wie im Original-Scumm-UI.
-- Links die Verben; mitte bzw. rechts die Inventargegenstände; weiter rechts die Gegenstände im Raum.
-- Die Funktion in die Richtungen zu gehen würde ich in den Rändern der angezeigten Grafik verstecken. (Hier könnte es sein, dass bei einigen Adventures die Logik nicht mehr stimmt, wenn unten im Bild nicht mehr Süden ist o.ä..,)
-- Das Hervorheben mit Farben beim "Mouseover" würde ich auch mit Sprites machen, d.h. die Schrift müsste also nicht auf einer durch 8 teilbaren Y-Koordinate liegen. (Die Ausgabe erfolgt invertiert und lässt ein Sprite beim "mouseover" durchscheinen.)
- Die Texte (Raumbeschreibung/Antworten) würde ich auf der Grafik anzeigen.
-- Hierzu würden die verbleibenden 7 Sprites genutzt werden, d.h. die Schrift wäre in Hires lesbar. Die Farben der Bitmap an den Stellen, an der Zeichen dargestellt werden, könnten einfach auf Schwarz gesetzt werden. Dadurch müsste man die Bitmap nicht retten, sondern nur Screen und Colorram + die Lesbarkeit wäre besser als bei einfachen einfarbigen Chars über einer MC-Bitmap. Leider ergeben 7 Sprites nur 168 Pixel Fläche.
- Sprites für Gegenstände würde ich nicht anzeigen, sondern auch als Bitmaps nachladen (bspw. Prefix + Raumnummer + Objektnummer)
-- (*) Der Grund ist einfach der, dass keine Sprites mehr übrig sind, wenn Text über der Grafik angezeigt wird bzw. das zu kompliziert werden würde. Tobias
Was meinerseits unklar ist bzw. wo ich selbst Schwierigkeiten bei einer "Umsetzung" (Proof-Of-Concept ;)) hätte:
- Die Loader-Routinen (Beim Laden würde ich den Bildschirm ausschalten und den Kernal einsetzen, statt einen IRQ-Loader zu nutzen.)
- Musik würde ich auch erstmal nicht einsetzen, weil diese 1.) ja auch beim Laden unterbrochen werden würde und 2.) weil ich noch nicht weiß in welcher Datei die Musik gespeichert ist. (Die SongNr. wird bei den Räumen gespeichert.)
- Evtl. hätte ich Schwierigkeiten beim "originalgetreuen" Textumbruch der Nachrichten o.ä..
- Ob die Endsequenzen eine spezielle Behandlung benötigen oder einfach aufgerufen und ausgeführt werden können, weiß ich nicht.
...Ansonsten scheint alles recht überschaubar, soweit man sich das DT100-Adventure anschaut, weil hier
1.) Allgemeinbedingungen und -Texte nicht verwendet werden und
2.) die O2-Datei nicht benötigt wird, weil max. 56 Objekte verwendet werden und
3.) es werden keine Sprites verwendet.Und das könnte auch ein erstes Ziel sein, dieses "einfache" Adventure umzusetzen. Sobald es geschehen ist, könnte ein Grafiker die 8 Bilder nachbearbeiten.
(... soviel zur Vorstelllung/Idee ...)
Was sind eure Gedanken dazu?
===================================
Zurück zum Topic:
- Für die Konvertierungsschritte am PC gibt es für die Schneideoperationen Programme mit einer Batch Funktion. Für die Konvertierung nach MC nutze ich bspw. Bitte melde dich an, um diesen Link zu sehen. oder online Bitte melde dich an, um diesen Link zu sehen.
-- Tobias Welches Tool nutzt Du im letzten Schritt für die Konvertierung nach Multicolor? (Evtl. gibt es ein gutes für die Kommandozeile? Dann wäre es möglich 100 Bilder unkompliziert auf einen Schlag zu konvertieren.)
- Bolzgramm Wieviele Objekte und Räume verwendest Du? Passt alles auf eine Diskette? Benutzt Du Allgemeinbedingungen/Texte ? -
Was ist DT-100?
Edit, sorry, partiell Alzheimer.

Kurz zum Hintergrund: in der Digital Talk 100 gab es ein Monkey Island Demo, das mit dem D42 Adventure System von Out of Order Softworks erstellt wurde.
Muss ich mir dann wohl doch mal anschauen.
Bitte melde dich an, um diesen Link zu sehen.Die Verbesserungen könnten im Detail sein:
- Oben die Grafik in 160x144 MC anzeigen
-- In dieser Vorstellungen sprechen viele Gründe diesmal für MC. (*)
-- (*) Der Grund ist einfach der, dass keine Sprites mehr übrig sind, wenn Text über der Grafik angezeigt wird bzw. das zu kompliziert werden würde.
Mit z.B. NUFLI könnte man die EGA-Fassung (scheint nach etwas "Recherche" auch die Urfassung aller SoMI Versionen zu sein) fast 1:1 umsetzen.
Die Unterscheidung der beiden Helligkeiten für cyan und magenta in EGA fällt weg, und einige Color Clashes wird es immer geben.
Aber ich verstehe, dass dieses Format außer für "passive" Bilder leider eher ungeeignet ist.
Aus Konvertierungssicht wäre die Erweiterung von 96 auf 144 Linien auch bei Multicolor ein deutlicher Qualitätssprung:
Ein Beschneiden auf 96 Linien kommt nicht in Frage, da sonst zuviel Bildinhalt unterschlagen wird.
Andererseits macht das Stauchen von 1xx Lininen auf 96 das Ergebnis nicht schärfer/detailierter.Was sind eure Gedanken dazu?
Du willst also diese D42-"Engine" umschreiben/verbessern, richtig? So ne Art "ScummVM-ultralight"-D42?
Davon hab ich keine Ahnung.
@Bolzmann muss abschätzen, ob das machbar ist bzw. für ihn in Frage kommt. Es ist ja sein Projekt und er hat dazu schon diverse Vorüberlegungen angestellt.
Was mich betrifft, ist mir der Kult um diese Spielereihe bekannt, ich persönlich bin dazu aber emotional nicht gebunden.
Aus Konvertierungssicht würde ich wie gesagt die 144 Linien durchaus begrüßen.

Welches Tool nutzt Du im letzten Schritt für die Konvertierung nach Multicolor? (Evtl. gibt es ein gutes für die Kommandozeile? Dann wäre es möglich 100 Bilder unkompliziert auf einen Schlag zu konvertieren.)
Noch nicht final, vermutlich aber Retropixels online. Alles Handarbeit, auch die Schritte vorher in Photoshop.

Die von Dir genannten Konvertierungsprogramme probiere ich aber gerne aus.
mfg Tobias
-
Mit z.B. NUFLI könnte man die EGA-Fassung (scheint nach etwas "Recherche" auch die Urfassung aller SoMI Versionen zu sein) fast 1:1 umsetzen.
Die Unterscheidung der beiden Helligkeiten für cyan und magenta in EGA fällt weg, und einige Color Clashes wird es noch geben.
Aber ich verstehe, dass dieses Format außer für "passive" Bilder leider eher ungeeignet ist.
Aus Konvertierungssicht wäre die Erweiterung von 96 auf 144 Linien auch bei Multicolor ein deutlicher Qualitätssprung.Pro: Das NUFLI müsste nur über 144 Pixel gehen.
Contra: Die Frage ist, ob man einen Mauszeiger auf der Grafik darstellen kann und, ob transparenter Text möglich ist.Es gibt einige Alternativen zu NUFLI:
Erst das modifizierte original Bild, d.h. die Farben etwas dunkler gemacht, damit nicht soviele auf engem Raum sind:
Bitte melde dich an, um diesen Anhang zu sehen.EHires: trans. Text ohne Clashes möglich, falls die Farbe korrekt gewählt wurden, bspw. Ink = schwarz.
Bitte melde dich an, um diesen Anhang zu sehen.MC: Hires-Text nur über Sprites lösbar
Bitte melde dich an, um diesen Anhang zu sehen.
AFLI (Godot mit unmodifiz. Bild):
Bitte melde dich an, um diesen Anhang zu sehen.
MUSC-V1: gefällt mir rein techn. am besten von den alternativen Grafikmodi
Bitte melde dich an, um diesen Anhang zu sehen.MUSC-V2: Evtl. Flicker mit zus. Maussprite ?
Bitte melde dich an, um diesen Anhang zu sehen.
Ich habe mir bereits Quellen zu NUFLI herausgesucht und angeschaut, aber das Thema scheint mir zu kompliziert.
Evtl. gibt es irgendwo einen Viewer der gut erklärt ist. Dann könnte man schauen, ob sich das Format nutzen lässt.
Das Problem mit dem Mauszeiger bleibt m.M.n. jedoch bestehen.
Wenn man sich einen Schritt von der SCUMM-UI entfernt, könnte man auch auf die Maus verzichten und per Keyboard die Befehle wählen.Du willst also diese D42-"Engine" umschreiben/verbessern, richtig?
((("Wollen" ist übertrieben.)))
Aber ein Nachprogrammieren würde ich besser finden, weil auch der Spielfluss mit dem scrollenden Text und dem kleinen begrenzten Fenster im aktuellen D42-System geändert/verbessert werden könnte und alles einwenig mehr nach SCUMM, passend zum Threadthema, aussehen würde.
Emotional bin ich da auch nicht drin.
Mich interessiert nur, ob man gute Lösungen für bestimmte kleine Probleme finden kann.
(((Ich habe diesbezgl. ja auch einige Tests gemacht.)))Alles Handarbeit, auch die Schritte vorher in Photoshop
In Photoshop gibt es angeblich auch Batch-Processing.
Edit:
Im Anhang ist noch das MUSC-V1-Bild als .prg zum selber anschauen angehängt.
Ich denke, dass das die einzige einfache Alternative mit Hires-Pixeln zum subjektiv komplizierteren NUFLI ist. (Im Grunde sind damit auch alle Punkte, die ich oben beschrieben habe umsetzbar, falls ich nichts vergessen habe...)(Ich wollte noch schreiben, dass ich kein Brute-Force o.ä. bei der Konvertierung verwendet habe.)
-
Aber ein Nachprogrammieren würde ich besser finden
Am Ende muss so ein Nachprogrammieren umsetzbar sein und es muss eben auch jemand machen (wollen/können).
Es gibt einige Alternativen zu NUFLI:
Die Bilder sind schwierig miteinander zu vergleichen, da sie teils stark unterschiedliche Paletten in den PC-Screenshots haben.
Pro: Das NUFLI müsste nur über 144 Pixel gehen.
Würde das was für die verfügbaren Sprites nutzen? Ich bin kein Programmierer, aber ich glaube NEIN. Die Sprites werden ja nach unten "unendlich" erweitert, ob das Bild da 144 oder 200 Pixel hoch ist, reduziert die Anzahl der Sprites nicht. So mein Verständnis.
MUSC-V1-Bild
Gibt's irgendwo ne Übersicht mit den Spezifiaktion zu den diversen Algotech-Formaten? Die txt-Dateien zu den Konvertern sind meist nicht sehr aufschlussreich.
EHires
Was ist das?
AFLI
Sieht am oberen Bildrand schlimm aus.
Ich sage es nochmal:
Klassisches MC über 144 Zeilen fände ich für diesen Zweck eigentlich ausreichend. Klar würde Hiresauflösung besser aussehen. Wenn es dann aber viele Color Clashes gerade an sehr "gleichmäßigen" Bildelementen gibt und wenn das das Programmieren der anderen Elemente ungleich aufwändiger macht, würde ich es hier sein lassen.Wie schaut es mit MC-FLI aus? Damit müsste man einige Color Clashes vermeiden können und hätte "ehrliche", C64 typsiche Mutlicolor-Auflösung.
Nachteil von Hires wäre, dass auch Black Bleeding (deutlich stärker als bei MC) auftritt, wenn z.b. blau mit schwarz gedithert wird. Da säuft das blau fast komplett ab.
In Photoshop gibt es angeblich auch Batch-Processing.
Ja so ne Stapelverarbeitung gibt es sicher. Ich benutze das Programm nur Hobby-mäßig und kann z.B. sowas nicht.

mfg Tobias
-
Was sind eure Gedanken dazu?
Äh...sorry, aber das ist mir dann doch zu hoch...
da ich nahezu keine c64-Ahnung habe und mich deswegen umso mehr über das D42-System freue, kann ich selbst daran nichts ändern und auch wenn ich es könnte, würde ich es nicht machen wollen.
Es hat ja schon seinen Grund, warum Stephan Lesch und Tobias Erbsland das System so programmiert haben, wie es jetzt ist.
Ich habe Stephan auch schon ein paar Mal darum gebeten, kleine Änderungen in der Engine vorznehmen, aber da ging es v.a. um andere Farben für die Ausgabetexte (im Original schwarz auf grau), mehr Textspeicher für das Intro, Änderungen im Scrollspeed usw.
Vielen Dank für die ganzen Überlegungen, aber aufgrund meiner geringen Kenntnisse begnüge ich mich mit dem vorhandenen System und bin da auch total zufrieden mit.
Gruß
Sönke
-
Woow, ich wäre so baff, wenn ihr diese schöne Geschichte in dieses Adventuresystem übertragt! Neu erfunden oder nicht. Beides wäre der Hammer! Es gab ja schon einige Experimente in diese Richtung, aber etwas fertiges habe ich glaube ich, noch niemals gesehen. Meine grosse Hoffnung läge ja da. Wobei ich tatsächlich am schönsten fände, man würde diese bekannten Hintergründe neu interpretieren. Also anpassen.
Die Strasse zum Beispiel, da könnte man das Muster für die einzelnen Kopfsteine ändern, die Steine vergrössern, bis es passender aussieht, und weniger nach zu groben Pixeln.
-
Wieso nicht einfach schneiden und in MC konvertieren?
So kann es im D64 System verwendet werden.
Schneiden finde ich ganz persoenlich unendlich angenehmer als stauchen (autsch...). Das mag Geschmacksache sein, aber einige Menschen (ich zB) reagieren sehr empfindlich auf derart defekte aspect ratios

Es sind ja Standbilder und genau dafuer ist das D64 gedacht.
Einige der EGA->MC Konvertierungen fand ich recht gelungen, um die Stimmung rueberzubringen.
Natuerlich ist das was anderes als NUFLI oder gar handgepixelte Grafiken.
So wie D64 kein Scumm ist. Macht ja nichts.
-
MUSC-V1: gefällt mir rein techn. am besten von den alternativen Grafikmodi
Finde ich auch. Gibt es irgendwo eine genaue Spezifikation des Formats? Auch enthusi stimme ich voll zu, plattgedrückt geht gar nicht...
Arndt
-
Vielleicht findes du hier die entsprechenden Infos.
Bitte melde dich an, um diesen Link zu sehen.
-
Schneiden finde ich ganz persoenlich unendlich angenehmer als stauchen (autsch...)
Wie genau?
D42 (Du meinst das mit D64, oder?) kann 320 (hier 160 doppelt breite) x 96 px darstellen.
Das Original hat 320x144 px. Wenn wir jetzt nur 96 Zeilen ausschneiden und das A/R beibehalten, muss ich ~214x96px auschneiden. Diese stelle ich dann mit schwarzen Rändern auf 320x96px dar. Was bringt das, außer dass ich 2x 53x96 px verschenke?
Oder meinst Du 320x96 aus 320x144 ausschneiden? Das hatten wir jetzt schon mehrmals, dass auch so in einigen Szenen zuviel Info verloren geht.Je nach Szene durchschnittlich ~120 Linien auf 96 Linien zu reduzieren, halte ich für einen angesichts der Beschränkungen vertretbaren Weg. So geht nur die Hälfte an Originalinhalt flöten und das Bild wird nur die Häfte gequetscht.
Also "Comic" sieht das nicht so schlimm aus als wenn man das mit einem Foto von echten Menschen/Gegenständen machen würde.mfg Tobias
-
Ja, genau das meine ich sollte man (meiner Meinung nach) auf gar keinen Fall machen.
Sondern:
einen 320x96 (Doppelpix) grossen Ausschnitt auswaehlen, gut konvertieren. Fertig.
-
wo möglich, werde ich 320x96 ausschneiden.
Aber wenn ich das Gefühl habe, dass mir zuviel Bild-Info verlorengeht, dann werde ich auf 120 gehen.
-
Weiseigentlich jemand was aus diesem Projekt geworden ist? Das wäre ja eine gute Basis für ein richtiges "Demake": Bitte melde dich an, um diesen Link zu sehen.
Bitte melde dich an, um dieses Medienelement zu sehen.
Bitte melde dich an, um dieses Medienelement zu sehen.
Bitte melde dich an, um dieses Medienelement zu sehen.
-
Das Projekt wurde abgebrochen, siehe Bitte melde dich an, um diesen Link zu sehen.
-
Weiseigentlich jemand was aus diesem Projekt geworden ist? Das wäre ja eine gute Basis für ein richtiges "Demake": Bitte melde dich an, um diesen Link zu sehen.
Indy III - Fake oder nicht Fake, das ist hier die Demo.
Laut Wiki kam da nix, vermutlich nur ne Grafikdemo oder er wurde im Vorfeld von Lucas zugeklagt. :emojiSmiley-01:Bitte melde dich an, um diesen Link zu sehen.)
Back to Monkey Island:
Finde auch, dass "multicolor crop" passend wäre, da man eh nicht rumlaufen kann und ein "authentischer SCUMM Port" nur richtig geil wäre, wenn man die Grafik nahezu 1:1 portieren würde und das fräße Arbeitsstunden ohne Ende.
Hatten wir ja quasi schon aber hier nochmal im Vergleich:
Bitte melde dich an, um diesen Anhang zu sehen.
links: 96p hoher Ausschnitt (Treppe ist im Ansatz zu sehen) - rechts: 144p auf 96p skaliert mit Rändern an den Seiten
Das Erstellen der individuellen Ausschnitte macht natürlich auch viel Arbeit.
-
5ace
Wenn Du das D42 System verbessern / flexibler machen kannst, ist das sicher eine gute Sache und viele werden Dir dankbar sein, solange es rückwärtskompatibel bleibt.
Das wird aber eher ein mitterlfristiges Projekt werden, oder?@all
Es wird wohl am zielführensten sein, wenn Bolzgramm das jetzt so durchzieht, wie besprochen. Auch mit gestauchten und plattgedrückten Konvertierungen.
Ich bin der letzte, der nicht immer rummäkelt und es am liebsten 120%ig hätte.
Aber wenn wir uns da jetzt schon am Anfang verkünsteln, wird es so werden, wie mit den beiden existierenden tSoMI-"Demos" oder dem gerade oben gezeigten Indiana Jones: es wird nie fertig werden. Wird schon seine Gründe haben, dass dem so ist.
Wenn das Vorhaben gelingt und später mal eine verbesserte D42 Engine exisitert, kann man immer noch eine aufwändigere tSoMI-Version nachlegen.
Es ist bestimmt schon alleine eine riesen Arbeit, die ganzen "Pfade", Kombinationen usw. zu programmieren. Das alles gibt's dann ja schon und man kann darauf zurückgreifen.mfg Tobias
-
Es wird wohl am zielführensten sein, wenn Bolzgramm das jetzt so durchzieht, wie besprochen. Auch mit gestauchten und plattgedrückten Konvertierungen.

So let it be written, so let it be done...
-