Gegenstände im Level einen Namen geben und im Inventar Größe, Position, Rotation und Drehung festlegen
Um in unserem Level den Namen von Gegenständen wie Puzzle_Items, Key_Items, usw. und Größe, Position und Drehung im Inventar zu definieren, legen wir diese in der Gameflow.lua zwischen" level1.objects=" an.
1 Eintrag in der Gamesflow.lua
In der Praxis sieht das in der Gameflow.lua Datei sieht das Ganze so aus:
level1.objects = {
InventoryItem.new(
"garden_key",
ObjID.PUZZLE_ITEM1,
0,
0.5,
Rotation.new(0, 0, 0),
RotationAxis.Y,
-1,
ItemAction.USE
)
}
Display More
Nehmen wir als Beispiel den Garden Key aus dem Rome Level von Tomb Raider - die Chronik als Beispiel:
level1.objects= {}
level1 hier die Bezeichnung uneres Levelblocks. Dahinter schreiben wir durch einen "." getrennt das Wort "objects" und ein Gleichheitszeichen. In die geschweifte Klammer setzen wir nun alle unsere Gegenstände, die Lara benutzen kann wie Puzzle_Items, Key_Items, usw.
InventoryItem.new()
Nun setzen wir zwischen den Klammern unseren ersten Gegenstand, gefolgt von den folgenden Attributen, die wir jeweils durch ein Komma trennen:
"garden_key"
Hier vergeben wir einen Namen, den wir später auch in der Strings.lua vergeben.
Anmerkung:
Dies ist noch nicht der Name, der im Inventar erscheinen wird. Diesen vergeben wir in der Strings.lua (siehe unten)
ObjID.PUZZLE_ITEM1
Hier nennen wir den Slot, in den wir den Gegenstand gesetzt haben. Der Slotname dürfte der Gleiche wie bei der alten Engine sein. Zur Sicherheit kann man sich aber alle Slots verfügbaren Slots in der TEN Dokumentation von squidshire unter dem Menüpunkt "Objects.ObjID" ansehen.
0
Hier legen wir fest, wo sich der Gegenstand auf der Y-Achse befindet. Positive Werte bewegen den Gegenstand nach unten. Ein Wert von 100 zeigt den Gegenstand ungefähr direkt unter seiner gewöhnlichen Position.
0.5
Hier legen wir die Größe fest. 1 ist Standardgröße. Werte unter 1 werden mit einem Punkt geschrieben, z.B. 0.8.
Rotation.new(0, 0, 0)
Festlegen der Neigung bei der X-, Y-, und Z-Achse.
RotationAxis.Y
Hier geben wir die Achse an, um der sich das Objekt drehen soll, wenn wir es im Inventar aufrufen. Es gehen folgende 3 Werte:
RotationAxis.X
RotationAxis.Y
RotationAxis.Z
-1
Dieser Wert steht für "meshbits". Leider ist er noch nicht implementiert und es gibt noch keine Erklärung dazu, nur dass es im Moment egal ist, welchen Wert man hier angibt.
ItemAction.USE
Hier kann man mehrere Werte hinter "ItemAction." setzen.
Referenz:
ItemAction.USE
nimmt man für Gegenstände, die Lara benutzen kann, wie Puzzle Items und Keys usw.
ItemAction.EXAMINE
wohl für Gegenstände, die man untersuchen kann wie z.B. Schriftrollen oder auch einfach nur Secrets die man sammelt, wie z.B. der goldene Totenkopf aus dem Angkor Wat Level.
ItemAction.EQUIP
könnte für Gegenstände genommen werden, mit denen sich Lara ausrüstet, wie Waffen
ItemAction.COMBINE
wenn wir Puzzle Items haben die kombiniert werden können, wie beispielsweise ObjID.PUZZLE_ITEM1_COMBO1 und ObjID.PUZZLE_ITEM1_COMBO2 muss hier "ItemAction.Combine" gesetzt werden.
Beispiel:
level1.objects = {
InventoryItem.new(
"puzzle_item6",
ObjID.PUZZLE_ITEM6,
0,
0.5,
Rotation.new(-75,0,0),
RotationAxis.Y,
-1,
ItemAction.USE
),
InventoryItem.new(
"puzzle_item6_combo1",
ObjID.PUZZLE_ITEM6_COMBO1,
0,
0.5,
Rotation.new(-75,0,0),
RotationAxis.Y,
-1,
ItemAction.COMBINE
),
InventoryItem.new(
"puzzle_item6_combo2",
ObjID.PUZZLE_ITEM6_COMBO2,
0,
0.5,
Rotation.new(45,45,0),
RotationAxis.Y,
-1,
ItemAction.COMBINE
),
}
Display More
Tragen wir nun einen weiteren Gegenstand ein, setzen wir immer nach der geschlossenen Klammer des vorherigen Gegenstandes ein Komma ",".
Beim letzten Gegenstand in der Liste, muss kein Komma mehr gesetzt werden. Man sollte aber nicht vergessen zum Schluss die geschlossene, geschweifte Klammer von "level.objects" zu setzen.
Beispiel bei zwei Gegenständen:
level1.objects = {
InventoryItem.new(
"garden_key",
ObjID.PUZZLE_ITEM1,
0,
0.5,
Rotation.new(0, 0, 0),
RotationAxis.Y,
-1,
ItemAction.USE
),
InventoryItem.new(
"golden_key",
ObjID.KEY_ITEM1,
0,
0.5,
Rotation.new(0, 0, 0),
RotationAxis.Y,
-1,
ItemAction.USE
)
}
Display More
2 Eintrag in der Strings.lua
Nun müssen wir unseren Gegenstand noch in der Strings.lua anlegen. Der Vorgang ist eigentlich der Gleiche wie das Anlegen eines neuen Levelnamens.
Wir öffnen die Strings.lua und setzen in der "local strings = {}" unseren Eintrag für den Garden Key, am besten am Ende der Liste.
Anmerkung:
Auch hier nicht vergessen, nach der geschlossenen geschweiften Klammer ein Komma "," zu setzen, falls darunter weitere Einträge erfolgen. Nur beim letzten Eintrag vor der geschlossenen geschweiften Klammer von "local strings =" lässt man das "," weg.
golden_key
Hier verwenden wir den Namen, den wir auch schon in der Gamesflow.lua vergeben haben. (Zweiter Eintrag nach level1.objects =".)
"Golden Key"
Der nächste Eintrag ist der englische Name für den Gegenstand, welcher später auch im Inventar zu lesen sein wird.
Anmerkung:
In die daraufolgenden 7 Anführungszeichen würde man den Namen für den Gegenstand in anderen Sprachen setzen wie "Italienisch", "Deutsch", "Französisch", "Holländisch", "Spanisch", "Japanisch" und "Russisch". Allerdings weiß ich nicht, ob der TombIDE diese Sprachen schon unterstützt und ob man die Sprache schon umstellen kann bei TEN.
In der Zwischenzeit habe ich gesehen, dass man die anderen Klammern für die Sprachen auch weglassen kann, wenn man z.B. eh nur Englisch als Sprache nimmt.
Haben wir alles erledigt, können wir unseren Eintrag in unserem Level mit dem entsprechenden Gegenstand testen.
Wichtige Anmerkung:
In der Tomb Engine Version 1.0 setzt Lara "Puzzle_Items" nur ein, wenn man den entsprechenden KEY Trigger und mindestens einen weiteren Trigger gesetzt hat. Wird in der nächsten Version wieder geändert, so dass Lara auch ohne Trigger den Gegenstand einsetzt.
Seit Version 1.0.2 wurde "InvID" in "ObjID" geändert.
Hinweis von illyaine
Bitte aufpassen, dass die Einträge vor dem abschließenden "Flow.AddLevel(LEVELNAME)" hinzugefügt werden. Da ab der Zeile "Flow.AddLevel" das Level abgeschlossen ist, sonst wird eure Änderung nicht angezeigt werden.
Bsp in meinem Fall Croft Manor Level:
Croft_Manor.objects = {
InventoryItem.new ("Garden_Key", ObjID.PUZZLE_ITEM1, 515, 0.7, Rotation.new(0, 0, 0), RotationAxis.Y, 0, ItemAction.USE);
}
Flow.AddLevel(Croft_Manor)
Setze ich meine Zeile für die Beschriftung der Puzzle Items unter der "Flow.AddLevel" Zeile, wird diese Änderung nicht beachtet.