• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Legend of Grimrock – Editor veröffentlicht!

DeeJay66

Anfänger/in
Mitglied seit
03.08.2003
Beiträge
62
Reaktionspunkte
1
Legend of Grimrock – Editor veröffentlicht!

Hallo ihr Lieben,


der Dungeon Editor für „Legend of Grimrock“ wurde heute in der Open Beta-Version veröffentlicht.


Wenn ihr das Spiel über Steam erworben habt, könnt ihr es manuell updaten und den Editor im Hauptmenü des Spiels starten.


Anleitung und nähere Informationen gibt es hier: Legend of Grimrock





Viel Spaß,


-DeeJay66
 
Mmh, also bei mir updated er das Spiel nicht. Wie geht das manuell? Wo ist der Download auf der Seite? Ich finde das irgendwie nicht.^^
 
In Steam (englisch) einen Rechtsklick auf das Spiel und "Properties" > "BETA" > „Public Beta“ auswählen.


Danach erfolgte bei mir ein Update für ca. 30 Sekunden.


Du kannst den Editor dann im Hauptmenü des Spiels starten.




Viel Erfolg,


-DeeJay66
 
So hab mich jetzt mal ein wenig damit beschäftigt und muss sagen, der Editor macht echt Spaß.

Dabei ist folgendes Dungeon bei rum gekommen (mein erster Versuch^^):
Steam Community :: Error

Wer Bock hat, kann es sich ja mal anschauen. Aber ist - wie im Text beschrieben - im Grunde nur entstanden, damit ich den Editor lerne. ;)

EDIT:
Ich weiß nicht, was da los ist. Das ist der Link zu meinem Dungeon, aber der will iwie nicht.^^
Naja, ist unter Mothman im LOG Workshop zu finden. Da gibt es ja nur ein Dungeon.^^

Achso, ich glaube man muss mit einem Account angemeldet sein, der das Spiel besitzt und auch an der Beta teilnimmt. Dann kann man evtl. drauf zugreifen.
 
Zuletzt bearbeitet:
Aus dem "Was spielt ihr gerade"-Thread:

Danke. Aber war - wie gesagt- auch nur mein erster "Test"-Dungeon.
Du hast eine Datei namens "intro.lua", wo du das festlegst.
Ist in der Anleitung auch gut erklärt. Ich kann dir aber auch meine intro.lua zur Verfügung stellen, wenn du magst.

Tja, hättest du mich mal gefragt. Wäre schneller gegangen. ^^

Ja, kann man. Du klonst einfach eine vorhanden Notiz als neues Item und benennst diese um.
Das geht auch mit allen anderen Objekten.

Der Sound und die Textbotschaft bei einem Secret kommt nur im richtigen Spiel. In der Editorvorschau ist das nicht zu hören/sehen. Liegt an der Vorschau.

Über LUA-Scripte.
Bei den "Nischen" kannst du ja bei Benutzung ein Script abfeuern. In diesem Script (in diesen Scriptfunktionen) musst du dann abfragen, welches Item in der Nische liegt. Ich such dir gleich mal das Script dafür raus.

Du erstellst einen TIMER, der ununterbrochen läuft und jede Sekunde (oder so) prüft, ob die beiden Gegner tot sind (mit welcher Funktion man das prüfen kann, weiß ich aber so spontan auch nicht.

Da weiß ich nichts drüber. Sorry. Es gibt bestimmt ein Türen-Script, welches man auch editieren kann. Aber wo und wie, weiß ich nicht. :|

Dieser LUA-Script Krempel sieht auf den ersten Blick recht kompliziert aus, da werde ich mich wohl erstmal ein wenig einarbeiten (bzw. viel lesen und probieren) müssen, bevor ich den Kram im Editor sinnvoll nutzen kann.
 
Hier Funktionen um ein "Nischen"-Rätsel zu machen:

sCount = 0
currAlcove = 0
foundAlready = 0
riddlesolved = 0

function Alki()

sCount = 0
foundAlready = 0
Alcove1()
foundAlready = 0
Alcove2()
foundAlready = 0
Alcove3()
foundAlready = 0
Alcove4()
foundAlready = 0
Alcove5()
foundAlready = 0
Alcove6()

if sCount == 6 then

if riddlesolved == 0 then

riddlesolved = 1
playSound("lock1")
playSound("tada1")

dungeon_door_metal_3:open()
dungeon_door_metal_4:open()


end

else

dungeon_door_metal_3:close()
dungeon_door_metal_4:close()
riddlesolved = 0

end

end

function Alcove1()
currAlcove = dungeon_alcove_20
checkAlcoveForItems()
end
function Alcove2()
currAlcove = dungeon_alcove_21
checkAlcoveForItems()
end
function Alcove3()
currAlcove = dungeon_alcove_22
checkAlcoveForItems()
end
function Alcove4()
currAlcove = dungeon_alcove_23
checkAlcoveForItems()
end
function Alcove5()
currAlcove = dungeon_alcove_24
checkAlcoveForItems()
end
function Alcove6()
currAlcove = dungeon_alcove_25
checkAlcoveForItems()
end



function checkAlcoveForItems()
-- change these variables to match your alcove's ID and the item you want to test for
local itemName = "skull"
local alcoveID = currAlcove

-- iterate through all the contained items on alcove, checking for a matching name
for i in alcoveID:containedItems() do
if i.name == itemName then
itemFound()
else
itemNotFound()
end
end
end

-- run this script _once for each item_ with a matching name
function itemFound()

if foundAlready == 0 then
sCount = sCount + 1
foundAlready = 1
end


end

-- run this script _once for each item_ without a matching name
function itemNotFound()

spawn("poison_cloud", party.level, currAlcove.x, currAlcove.y, 0)


dungeon_door_metal_3:close()
dungeon_door_metal_4:close()


end

Das Script muss in ein Script-Entity eingefügt und (in diesem Beispiel mit 6 Alkoven) mit jeder Alcove verknüpft werden. Es wird einfach die Funktion "Alki()" aufgerufen, die bei allen 6 Alkoven nacheinander prüft, ob ein bestimmtes Item drin ist (oder nicht).
Wurde das bestimmte Item (in dem Beispiel ein "skull") in allen 6 Alkoven gefunden, wird ein Sound abgespielt und die beiden Türen öffnen sich. Ist in einer der Nischen kein "skull" (ist der Counter also unter 6), werden die Türen wieder geschlossen. Und an jeder Alkove, wo kein "skull" liegt, entsteht eine Giftgas-Wolke.

EDIT:
Das Ganze geht sicher auch dynamischer. Aber ich hatte auch nur eine Nacht investiert bisher.^^


EDIT2:
Du kannst natürlich auch auf verschiedene Items prüfen, indem du noch eine Variable für den Itemnamen erstellst und diese vor jedem Funktionsaufruf setzt (sItem z.B.).
 
Zuletzt bearbeitet:
Dieser LUA-Script Krempel sieht auf den ersten Blick recht kompliziert aus, da werde ich mich wohl erstmal ein wenig einarbeiten (bzw. viel lesen und probieren) müssen, bevor ich den Kram im Editor sinnvoll nutzen kann.
Ja, auf den ersten Blick sieht das erschreckend kompliziert aus. Ist es aber garnicht. Es muss nur einmal "klick" machen.
 
Hier meine intro.lua : Download
Die Datei muss unter [dein Dungeonname]/mod_assets/cinematics liegen.

Die Bilder und die Musik musste natürlich anpassen. Die Texte kannste lassen, weil die sind eh genial. :B ;)
 
Hab das Script noch mal etwas angepasst. Du kannst es jetzt leichter anpassen.

sCount = 0
currAlcove = 0
foundAlready = 0
sItem = 0
riddlesolved = 0


aItem = {} -- Array fuer die Items (Reihenfolge beachten)
aName = {} -- Array fuer die Akkove Namen

-- DEFINITIONEN
iCount = 3 -- Anzahl der Items/Alkoven
aItem[1] = "dagger" -- erstes Item in erster Alkove
aItem[2] = "skull" -- zweites Item in erster Alkove
aItem[3] = "blue_gem" -- drittes Item in erster Alkove

aName[1] = dungeon_alcove_45 -- Name (ID) der ersten Alkove
aName[2] = dungeon_alcove_46 -- Name (ID) der zweiten Alkove
aName[3] = dungeon_alcove_47 -- Name (ID) der dritten Alkove


function CheckForItems()

sCount = 0

for i=1, iCount do

foundAlready = 0
currAlcove = aName -- zu durchsuchende Alkove
sItem = aItem -- zu suchendes Item
checkAlcove()

end

-- Pruefen, ob alle Items in ihrer Alkove sind
if sCount == iCount then

if riddlesolved == 0 then

riddlesolved = 1
-- Funktion aufrufen, bei Erfolg
openSesame()

end

else

riddlesolved = 0
-- Funktion aufrufen bei Misserfolg
closeSesame()

end

end

function checkAlcove()

local itemName = sItem
local alcoveID = currAlcove

for i in alcoveID:containedItems() do
if i.name == itemName then

if foundAlready == 0 then
sCount = sCount + 1
foundAlready = 1
end
end
end
end

function openSesame()

if riddlesolved == 1 then

playSound("lock1")
playSound("tada1")

dungeon_door_wooden_7:open()

end

end

function closeSesame()

if riddlesolved == 0 then

dungeon_door_wooden_7:close()

end

end


Im Grunde musst du nur die Anzahl der Alkoven, bzw. Items angeben (iCount).
Dann noch die Namen/ID der Items und entsprechenden Alkoven in die Arrays schreiben (die Reihenfolge muss so sein, dass das erste Item auch in die erste Alkove muss).
Achtung: Bei den Alkoven KEINE Anführungstriche nehmen!

Dann musst du nur die Alkoven (in dem Beispiel 3) mit dem Script verbinden und den Auslöser auf "any" stellen und die Funktion CheckForItems() aufrufen. Dann wird bei jedem Mal, wo der Spieler etwas in die Alkove legt oder etwas herausnimmt geprüft, ob die 3 Items in ihrem Platz liegen. Wenn ja, wird eine Tür geöffnet. Wenn nein, wird die Tür (wieder) geschlossen.
 
Ja, auf den ersten Blick sieht das erschreckend kompliziert aus. Ist es aber garnicht. Es muss nur einmal "klick" machen.

Hier meine intro.lua : Download
Die Datei muss unter [dein Dungeonname]/mod_assets/cinematics liegen.

Die Bilder und die Musik musste natürlich anpassen. Die Texte kannste lassen, weil die sind eh genial. :B ;)

Joa, der Text ist nett :) Sieht tatsächlich kompliziert aber auch irgendwie logisch aus. Man muss halt einmal wissen, wie die ganzen Befehle heißen und was sie bewirken. Danach ist es vermutlich nicht komplizierter als eine Excel-Wenn-Dann-Formel. Danke für das Rätsel-Script, werde mal schauen, was ich daraus lernen kann. Einige Befehle erklären sich ja von selbst, aber was in der Unterschied zwischen einem =-Zeichen und zwei davon?

Ich werde gleich mal meinen Test-Dungeon hochladen, sollte soweit durchspielbar sein (bis zu einer Wand, an der geschrieben steht, dass es später weiter geht). Einen kleinen Bug gibt es noch, aber ich habe eine Schriftrolle eingefügt, die erklärt, wie man den umgehen kann (ist keine Sackgasse!). Mich würde halt hauptsächlich interessieren, ob meine Rätsel und mein Dungeon-Design auch für Leute spielbar sind, die nicht wissen, was ich mir dabei gedacht habe :) Bei Steam lade ich es noch nicht hoch, da die oberen Stockwerke fehlen (man fängt im ersten Untergeschoss an) und das Balancing noch relativ katastrophal ist.

File-Upload.net - Der-Nebelturm.dat

Einfach ins Eigene Dokumente\Almost Human\Legend of Grimrock\Dungeons Verzeichnis kopieren, sollte (hoffentlich) funktionieren. Ach ja, das erste Rätsel kann frustrieren, aber es ist, wenn man alle Schriftrollen liest, auch ohne gejagt zu werden lösbar.
 
Zuletzt bearbeitet:
Einige Befehle erklären sich ja von selbst, aber was in der Unterschied zwischen einem =-Zeichen und zwei davon?
Ein einzelnes = steht für eine Zuweisung. Das heißt mit "a = 1" weist du der Variable a den Wert 1 zu.
Ein doppletes == steht für eine Abfrage. Mit "if a == 1" prüfst du, ob die Variable a den Wert 1 hat.
Da musst du aufpassen. Schreibst du jetzt nämlich in einer if-Abfrage "if a = 1" dann weist du den Wert gleichzeitig zu und hast eine Bedingung, die immer erfüllt ist (oder einen Programmabsturz, noch nicht mal probiert mit LUA^^).
Das ist bei vielen Sprachen so (z.B. auch bei PHP).
 
Wie kann ich meine Spielfigur etwas "sagen" lassen?
Das Ziel:
Der Spielercharakter in der ersten Reihe der Party soll einen Kommentar abgeben und der Text soll im HUD als Untertitel eingeblendet werden. Dabei soll - je nach Geschlecht des Spielercharakters - eine andere Sounddatei abgespielt werden.

1. Custom Sounds einpflegen
Um eigene Sounds zu verwenden, müssen diese dem Editor erstmal bekannt gemacht werden.
Im Pfad [euer Dungeonname]/mod_assets/scripts liegt ein LUA-Script namens sounds.lua
Dieses öffnet ihr mit einem Texteditor (z.B. Notepad) und fügt Folgendes ein:
defineSound{
name = "eSay1_female",
filename = "mod_assets/sounds/eSay1_female.wav",
loop = false,
volume = 2.0,
minDistance = 30,
maxDistance = 32,
}
Die Datei "eSay1_female.wav" muss -wie angegeben - im Ordner mod_assets/sounds/ liegen. Es funktioniert eigentlich jede herkömmlich WAV-Datei.
Damit haben wir den Sound "eSay1_female.wav" - die weibliche Stimme - für unseren Editor bereit gestellt und können diese verwenden.
Das Gleiche machen wir jetzt mit der Sounddatei für die männliche Stimme.
Wir kopieren einfach den Definitions-Block noch einmal darunter und passen den Dateinamen entsprechend an. Wir achten darauf, dass die beiden Sound-Dateien auch im richtigen Ordner liegen.
Damit de Editor die Änderungen auch erkennt. Muss das Projekt neu geladen werden (sofern man es schon geöffnet hatte). Ein Neustart des Editor ist normalerweise nicht notwendig.

2. Funktion einbauen
function egoStatement()

gend = party:getChampion(1):getSex() -- Geschlecht des ersten Charakter der Party ermitteln
-- cclass = party:getChampion(1):getRace() -- optional die Klasse des ersten Charakter der Party ermitteln
cName = party:getChampion(1):getName() -- für den Untertitel: Den Namen des ersten Charakter der Party ermitteln

if gend == "female" then -- Charakter ist weiblich

playSound("eSay1_female") -- unseren Custom-Sound abspielen
hudPrint(cName .. ": This is ridiculous!") -- Untertitel einblenden

else -- Charakter ist männlich

playSound("eSay1_male") -- unseren Custom-Sound abspielen
hudPrint(cName .. ": Here I come!") -- Untertitel einblenden

end

end
In dem Level, wo der Charakter sein Statement abgeben soll, platzieren wir ein Script-Entity und fügen dort den Code oben ein.

3. Funktion mit einem Auslöser verbinden
Als Auslöser kann man z.B. eine unsichtbare Druckplatte nehmen (pressure_plate_hidden).
Mit dieser Druckplatte verbinden wir einfach das Script und die Funktion egoStatement().
Damit der Charakter das Sprachsample nicht ständig wiederholt, solange der Spieler auf der Druckplatte steht, setzen wir bei der Platten-Eigenschaft "Activate Once". Dadurch wird das Script nur beim erstmaligen Betreten aktiviert.
 
Eine klein Sache, wo ich lange gesucht habe, bis ich das gefunden habe.
Vielleicht erspare ich ja jmd. damit Stress:

Wie funktionieren abgeschlossene Türen mit Schlüssel?
Einfach, wenn man weiß wie. :B

Zunächst platziert man ganz normal seine Tür. Es sollte allerdings eine "abgeschlossene" Tür mit sichtbarem Schlüsselloch sein.
Da gibt es - meines Wissens - nur dungeon_door_wooden_locked und temple_door_wooden_locked
Am einfachsten findet man Dinge in der Assets-Liste, wenn man ein Suchwort in den Filter eingibt. Zum Beispiel "locked". Dann bekommt man diese beiden Türen angezeigt.

Dann platziert man irgendwo innerhalb des Levels ein Script-Entity und schreibt dort Folgendes rein:
dungeon_door_wooden_locked_2:setOpenedBy("iron_key")
Das Script muss nicht mit einem Auslöser verknüpft werden. Die Zuweisung geschieht automatisch bei Levelstart.

Wobei der Name der Tür natürlich angepasst werden muss. Welche Schlüssel es gibt könnt ihr herausfinden, wenn ihr wieder den Filter anwenden auf die Assets-Liste. Schlüssel sind "Items". Gebt im Filter einfach "key" ein (ohne Anführungstriche!) und ihr seht alle verfügbaren Schlüssel.

In unserem Beispiel kann die Tür mit der ID "dungeon_door_wooden_locked_2" also nur mit dem Item "iron_key" geöffnet werden.

Dann müsst ihr natürlich noch dafür sorgen, dass dem Spieler irgendwie auch der entsprechende Schlüssel in die Hände fällt.
 
Verschlossenen Türen einen Schlüssel(typ) zuweisen kann man aber auch ganz ohne Script. Einfach die platzierte Tür (mit integriertem Schloss) platzieren und in den Objekteigenschaften unter "Opened by" den gewünschten Schlüssel (z. B. brass_key) eingeben. Dann lässt sich die Tür mit jedem Schlüssel des Typs öffnen.
 
Verschlossenen Türen einen Schlüssel(typ) zuweisen kann man aber auch ganz ohne Script. Einfach die platzierte Tür (mit integriertem Schloss) platzieren und in den Objekteigenschaften unter "Opened by" den gewünschten Schlüssel (z. B. brass_key) eingeben. Dann lässt sich die Tür mit jedem Schlüssel des Typs öffnen.
Tatsache. :B
Wieso ist mir das nicht aufgefallen. Kam das mit nem Update, oder war ich einfach nur blind?^^
 
Tatsache. :B
Wieso ist mir das nicht aufgefallen. Kam das mit nem Update, oder war ich einfach nur blind?^^

War bei mir von Anfang an so (hab den Editor aber auch erst seit 2 Tagen), eine verschlossene Tür war sogar das erste "Rätsel", das ich gebastelt habe :) Ich hoffe einfach mal, dass die Beinahe-Menschen noch mehr solcher Funktionen grafisch bzw. klickbar einbauen, ich glaube mit dem Script-System werde ich nicht warm. Es gibt einfach zu viele unterschiedliche Befehle, deren Bedeutung nicht immer auf den ersten Blick ersichtlich ist. Ich werde aber weiter damit herumprobieren (auch wenn man sagt, dass man einem alten Hund keine neuen Tricks mehr beibringen kann).
 
War bei mir von Anfang an so (hab den Editor aber auch erst seit 2 Tagen), eine verschlossene Tür war sogar das erste "Rätsel", das ich gebastelt habe :)
Naja, macht ja auch Sinn, dass es die Funktion gibt. Weiß auch nicht, warum mir das nicht aufgefallen ist.
Aber egal: Jetzt weißt du wenigstens, wie du das auch zur Laufzeit ändern kannst. Kann man ja evtl. auch mal gebrauchen.

Ich hoffe einfach mal, dass die Beinahe-Menschen noch mehr solcher Funktionen grafisch bzw. klickbar einbauen, ich glaube mit dem Script-System werde ich nicht warm. Es gibt einfach zu viele unterschiedliche Befehle, deren Bedeutung nicht immer auf den ersten Blick ersichtlich ist. Ich werde aber weiter damit herumprobieren (auch wenn man sagt, dass man einem alten Hund keine neuen Tricks mehr beibringen kann).
Es hilft sicherlich, wenn man schon etwas Programmier-Erfahrung hat. Aber grundsätzlich - denke ich - ist es nur eine Frage des Willens. Man muss sich halt durchbeißen. Und das, was ich bisher weiß, ist ja auch nur Anfänger-Wissen aus den Tutorials, Forum und etwas Logik entstanden.

Also: Durchhalten! :-D
 
So langsam kriege ich die ersten einfachen Scripts (durch Copy & Paste und anpassen) hin und habe auch die ersten Objekte selbst erstellt bzw. modifiziert (z. B. rotes Licht, für Rambo Fans gibt's auch blaues Licht). Aber ein (großes!) Problem habe ich noch:

Ich hab in meinem Dungeon ne Menge unsichtbare Auslöser erstellt, die ich mit hudPrint Scripts

z. B.

function geheimnis1()
cName = party:getChampion(3):getName()
hudPrint(cName..": Ich glaube, oestlich oeffnet sich eine Tuer.")
playSound("secret")
end
verknüpft habe, damit die Party-Mitglieder an verschiedenen Stellen im Spiel kurze Kommentare loswerden. Meistens funktioniert das auch, aber manchmal werden die Scripts einfach nicht ausgelöst, obwohl ich nichts verändert habe. Wenn ich dann aus dem Spiel rausgehe, in die Scripts schaue und Fehler suche, dann finde ich nichts, ändere nichts, und beim nächsten Test funktionieren die plötzlich. Das ist ziemlich frustrierend! 90% dieser Kommentar-Scripts funktionieren, die anderen 10% streiken dagegen. Hab auch schon versucht den Dungeon zu exportieren und im richtigen Spiel (also nicht im Editor) zu starten ... das Problem bleibt. Bin ich der einzige, der das Problem hat? Hab ich evtl. doch nen Fehler übersehen? Hab alle Auslöser so eingestellt (meistens versteckte Trittplatten), dass sie nur von der Party ausgelöst werden können und auch nur einmal.

Noch seltsamer: Ich hab das Gefühl, einige der Scripts sind einfach verschwunden und wurden durch neuere Scripts mit der gleichen ID ersetzt, die ich viel später erstellt habe. Gibt es evtl. ein Limit, das nur eine bestimmte Anzahl Scripts pro Dungeon vorhanden sein dürfen (hab. ca. 20 bis 25 Stück erstellt).
 
Zuletzt bearbeitet:
Zurück