Clonk Szenario tutorial

Hey, Leute, schönen Tag wünsch ich.

Ich würde soooo gerne mal anständige Szenarien bauen und zeichnen, aber alle Links auf der Entwicklerseite von Clonkspot funktionieren nicht.
Und es gibt auch kein Forum welches sich wirklich um dieses Thema kümmert und auch für so nen Noob wie mich geeignet ist.

Bitte Leute wäre so geil wenn ihr mir da weiterhelfen könntet oder mal die Links wieder auffrischen würdet.

Danke und noch nen geilen Tag

Ich habe diesbezüglich bereits einen Pull Request erstellt.

Szenarien zeichnen geht am Einfachsten über den Konsolemodus (/console), Editor.exe startet die Clonk-Engine per Default automatisch in diesem Modus. Dort hast du verschiedene Zeichentools zur Verfügung.

Um weitere, allgemeine Informationen zu erhalten, sind das Clonk-Wiki, das CNDG, das Entwicklerbrett hier im Clonkspot Forum, das Entwicklerbrett im archivierten Clonk Forum sowie die Entwicklerdokumentation unerlässlichen Quellen.

1 „Gefällt mir“

Wow, danke das hat mir sehr geholfen.

Ich hab aber jetzt ein neues Problem:

Ich hab ein TeamMellee gebaut aber ich hab leider noch nicht heraus gefunden wie ich die Startposition genau bestimmen kann. Aber so das auch alle clonks eines Spieler da landen und das da auch nen flagge für dieses Team da landet. Für 4 Teams

Bis jetzt hab ich erst das

if(GetPlayerTeam(iPlr) ==1 ){
GetCrew(iPlr)->SetPosition(1373, 1170);

aber so landet nur einer meiner Clonks da hin wo ich ihn haben will und die anderen und die Flagge irgendwo.
Kannst mir da weiterhelfen?

LG Blaukraut

Es landet nur ein Clonk dort, wo du ihn haben willst, weil du nur einem Clonk sagt, dass du ihn dort haben willst. Du brauchst dafür eine Schleife:

if (GetPlayerTeam(iPlr) == 1)
{
    for (var i = 0; i < GetCrewCount(); ++i)
    {
        GetCrew(iPlr, i)->SetPosition(1373, 1170);
    }
}

Außerdem musst du die Position der Flagge setzen.

Wenn du aber alle Spieler eines Team an einer Position starten lassen und Scenario.txt verwenden willst, kannst du dem Team eine [Player*]-Sektion zuweisen, in der du die Position festlegst. Willst du sie exakt an der Position haben, egal, ob frei oder nicht, kannst du in der Sektion EnforcePosition = 1 setzen.

ok, und wie setz ich nun die Flaggen?

und wie kann ich Gegenstände in Gebäuden platzieren. Beispielsweise ne flagge in ein Konter (Burg) oder Ausrüstungsteile für Ritter (Schwerter, Schilde, usw.)

Du musst das Objekt finden. Hier kommt FindObject2 ins Spiel:

FindObject2(Find_ID(FLAG), Find_Owner(iPlr))->SetPosition(1373, 1170);

FindObject2 bekommt als Argumente Such- und Sortierkriterien übergeben, die von links nach rechts abgearbeitet werden - zuerst werden intern alle Flaggen zusammengesucht, dann alle, die dem Spieler iPlr gehören; das erste Objekt wird dabei zurückgegeben. Wenn keine Flagge übergeben wird, wird 0 (mit #strict 3 im kommenden 334-Release nil), was dazu führt, dass SetPosition mit dem Fehler Object call: target is zero! fehlschlägt - du kannst eine Funktion nicht in nichts aufrufen.

Da kommen Variablen und Kontrollstrukturen ins Spiel.

var flag = FindObject2(Find_ID(FLAG), Find_Owner(iPlr));
if (flag)
{
  flag->SetPosition(1373, 1170);
}

Was macht dieser Code?

  • Er speichert das Ergebnis vom FindObject2 - Aufruf in der Variable flag.
  • Wenn flag dem Wahrheitswert true entspricht - also in dem Fall ein Objekt und nicht 0 oder nil ist, wird die Position der Flagge gesetzt.

Doku: if, FindObject2

Das hängt von der Reihenfolge ab. Hast du ein Burgobjekt gefunden (siehe obiger Code), kannst du mit CreateContents(id, 0, anzahl) ein Inhaltsobjekt erstellen. Um Objekte in die Burg zu verschieben, kannst du objekt->Enter(burg) verwenden, wobei objekt und burg für die jeweiligen Objekte stehen.

einfach nur im szenario.txt die Position angeben ? nein, was muss ich noch dazumachen?

und das mit der Schleife um die Clonks da hin zu bringen wo ich sie haben will funktioniert bei mir nur mit dem 1. Spieler, der 2. wird wie gewohnt einfach irgendwo hin platziert…

Lg Blaukraut