Console Mode (aka Editor) Remake

Vielleicht würde es Sinn machen, den button by default auszublenden und mit einem einfach im Optionsmenü erreichbaren Häkchen einzublenden.

Man muss in die Credits gehen und in ein unsichtbares Feld "Siedlerclonk" tippen!!

Ich find cool, wenn das Menü direkt zeigt wie moddingfreundlich Clonk ist. Ich kann verstehen wenn man Leute bei Shareware mit Miniblockaden daran hindern will, die originalen Spielinhalte kaputt zu machen aber sonst fallen mir keine Gründe dafür ein.

Der normale Editor macht ja normal nix mit Rundenordner & Pakete. Also sieht das für mich idiotensicher aus.

Hab gerade ein Szenario Test.ocs mit dem Editor in Test.ocs gespeichert. Es entstand eine Endlosschleife mit dutzenden Szenarios: Test.ocs/Test.ocs/Test.ocs/Test.ocs/Test.ocs/Test.ocs[…] :tongue:

So ein Passwort macht aber auch nur Sinn, wenn der Editor auch erlaubt, sich seine Objektordner zu zerschießen!

Scrollbalken sind jetzt wieder drin.

Den Viewport-Lag habe ich mir auch angesehen. Es liegt auf jeden Fall nicht am Rendering, Animationen laufen ja ganz flüssig. Scheinbar werden aber die Mausevents nicht oft genug abgefragt. Wenn ich in C4ConsoleQtViewportView::mouseMoveEvent ein Log mit dem aktuellen FrameCounter hinzufüge und die Maus bewege, dann bekomme ich zwar einen Haufen Events, aber nur in Gruppen alle 2-3 Frames. Dadurch hüpft der Mauszeiger ziemlich.

Vielleicht muessen wir die Qt-Eventausfuehrung irgendwie direkter an den Main Loop koppeln. Ich weiss nicht genau, wie oft Console.Execute aufgerufen wird.

Viewport-Lag unter Windows behoben: Habe den Qt-internen VSync abgeschaltet. Das ist auch kein Problem, da Qt intern ohnehin double-buffering verwendet.

Ah, gut. Ist bei dir der Mauszeiger jetzt flüssig oder siehst du auch diese Sprünge?

Mauszeiger war eigentlich immer fluessig.

Was mir noch eingefallen ist:
Es ist oft schwer, im Editor Objekte zu verschieben, die nur 1 Pixel groß sind (Helferobjekte, Wasserfälle, …). Könnte man zum Verschieben vielleicht eine Taste auf der Tastatur drücken, um ausgewählte Objekte zu verschieben? :slight_smile:
Und idealerweise vielleicht sogar noch Tasten zum Rotieren und Skalieren!

Update:

Objekte koennen angeben, welche Eigenschaften sich bequem ueber den Editor setzen lassen sollen. Das sollte es Neulingen erleichtern, die wichtigsten Eigenshaften z.B. fuer Spielziele bequem auszuwaehlen.

Beispiel im Screenshot: Der ItemSpawn veroeffentlicht eine Property, die nur einsammelbare Definitionen auflistet:
local EditorProp_spawn_id = { Type=“def”, Filter=“Collectible”, Set=“SetSpawnObject” };

Im Editor sieht das dann so aus (Screenshot):



Die internen Eigenschaften aus den Proplists sind dafuer etwas nach unten gewandert.

Wow.

Bietet qt so wie es eingebunden ist möglichkeiten den UI Kram zu stylen? Für den Moment ist es ja wahrscheinlich ziemlich wumpe, ich würde es nur mal gerne wissen wo da die Möglchkeiten sind, da ich da so'n kleiner Fanatiker bin was Interfacedesign angeht.

Ja. Qt malt alles selbst, abhängig vom ausgewählten Theme. Weiter oben habe ich einen Screenshot gepostet, wie es mir einem Linux-Theme aussieht.

Update:
Neues vom Editor!

Fuer Objekteigenschaften kann man nun auch Arrays und PropLists festlegen. Damit kann man per Script komplexere Datentypen bauen, die sich bequem im Editor setzen lassen.

Das Konstruktions-Spielziel braucht zum Beispiel die Liste der Gebaeude mit Anzahl, die man bauen muss. Es gibt keinen Datentyp fuer ID-Liste. Man kann ihn sich aber selber definieren. Zunaechst der Datentyp fuer “Gebaeudetyp + Anzahl”:

var CountedID = { Type = “proplist”, Display = “{{count}}x{{id}}”, DefaultValue = { count=1, id=nil }, Elements = {
Name = “ID list entry”,
    EditorProp_count = { Type = “int”, Min = 1 },
    EditorProp_id = { Type = “def” } } };


Der Datentyp ist “proplist”, das heisst zum Bearbeiten geht der Editor eine Ebene tiefer und zeigt alle Eigenschaften an. Die zwei Eigenschaften sind “id” und “count” fuer den Gebaeudetyp und die Menge. Mit Display kann man angeben, dass die Eigenschaft statt als Proplist ({ id=Clonk, count=10 }) kuerzer angezeigt wird (10xClonk).

Die ID-Liste ist einfach nur ein Array bestehend aus diesen Eintraegen:
var IDList = { Name = “ID list”, Type = “array”, Display = 3, Elements = CountedID };

Benutzung dann zum Beispiel im Konstruktions-Spielziel:

EditorProp_construction_list = IDList;

Im Editor sieht das so aus:



Hier die Anzeige im Konstruktions-Spielziel. Klickt man die Eigenschaft an, kommt man in den Array-Editor. Hier kann man Elemente hinzufuegen, umsortieren (mit Drag+Drop) und entfernen:



Klickt man einen einzelnen Wert an, gelangt man in den Property-Editor fuer das gewaelte Element:



So kann man beliebige Listen zusammen bauen. Nach dem Speichern des Szenarios wird automatisch das Script in Objects.c generiert:
/* Automatically created objects file */

func InitializeObjects()
{
  var Goal_Construction001 = CreateObject(Goal_Construction, 459, 98);
  Goal_Construction001->AddConstruction(Flagpole, 1);
  Goal_Construction001->AddConstruction(Windmill, 5);
  return true;
}

Ziemlich gut.

Ja! Wie lange noch bis zum Merge?

Wir sollten dann echt mal versuchen im editor mode ein netzwerk spiel zu starten und dann ein Szenario zusammen bauen.

Es gibt leider noch viel zu tun und nicht so viel Zeit. Habe die Liste im Startposting mal aktualisiert.

Update:

Oh nein, schon wieder ein Update!

Es gibt nun ein “Player Start”-Objekt. Dieses koennen Newbies statt der [PlayerX]-Sektionen in der Scenario.txt oder statt InitializePlayer-Scripten benutzen, um Startposition/Geld/Clonks/Material/Bauplaene einfach im Editor zu setzen. Hier ein Serviervorschlag mit zwei Startobjekten fuer ein Team-Melee:



Spieler starten automatisch an diesem Objekt. Es gibt folgende Einstellungen:
* Spieler: Zum Beispiel alle Spieler oder nur die Spieler eines Teams
* Startgold: Wie reich zu Beginn?
* Crew: Wie viele Clonks?
* Startmaterial: Objekte werden automatisch auf die Clonks verteilt (z.B. bei 2 Clonks und 2 Schaufeln kriegt jeder Clonk eine Schaufel)
* Bauplaene: Keine, Alle, Alle ausser ID-Liste oder nur ID-Liste

Man kann auch mehrere Startobjekte fuer mehrere Teams setzen oder einfach nur mehrere Startpunkte fuer alle Spieler. Es wird dann ein zufaelliger Startpunkt moeglichst weit weg von Gegnern ausgewaehlt (z.B. fuer Melees). Das Startobjekt ist komplett im Script und kann natuerlich auch ueberladen werden.

Neulinge haetten natuerlich keine Ahnung, dass es dieses Objekt gibt. Darum enthalten mit “Neu…” im Editor erstellte Szenarien automatisch ein Startobjekt in der Mitte der Karte.