Seite 1 von 1

Die neuen Modding Fähigkeiten ab 1.32

Verfasst: 03. Dez 2013, 22:05
von Gerion
Ersteinmal Danke Chris, dass die Moddingfreundlichkeit nochmal einen solch großen Schritt nach vorn machen wird.

Ich habe zwei Anmerkungen dazu:
1. Ein Teil des Beispiels ist aus meiner Sicht recht gut lesbar und nachvollziehbar (zugegeben mit IT Hintergrund).
Für den anderen Teil, scheint mir das etwas anders auszusehen
[spoiler]

Code: Alles auswählen

 0 ) return text; return getLangString( text, [getName(hero)]); } function hasresponse(which) { if(which == 1) return true; if(which == 2) { dif = 0; dif++; setSpecialState("lobpreisungen", dif); var res = rollCheck({"who":hero, "type":"skill", "which":"selbstbeh", "mod":-1*dif}); return res.ok; } } function after(selid) { var ag = getCharAttribute("AG",hero,0); var gs = getCharSkill("geschichte",hero); var gk = getCharSkill("goetterkulte",hero); var r; if(ag > 2) { r = rollRandom(1,20); if(r  gs) { modifyCharSkill("geschichte", hero, 1); debugLog("Trying to increase skill geschichte, current " + gs + ", Roll " + r + "Result success"); } else { debugLog("Trying to increase skill geschichte, current " + gs + ", Roll " + r + "Result failed"); } } else { r = rollRandom(1,6) + rollRandom(1,6) + rollRandom(1,6); if(r > gs) { modifyCharSkill("geschichte", hero, 1); debugLog("Trying to increase skill geschichte, current " + gs + ", Roll " + r + "Result success"); } else { debugLog("Trying to increase skill geschichte, current " + gs + ", Roll " + r + "Result failed"); } } } if(gk  gk) { modifyCharSkill("goetterkulte", hero, 1); debugLog("Trying to increase skill goetterkulte, current " + gk + ", Roll " + r + "Result success"); } else { debugLog("Trying to increase skill goetterkulte, current " + gk + ", Roll " + r + "Result failed"); } } else { r = rollRandom(1,6) + rollRandom(1,6) + rollRandom(1,6); if(r > gk) { modifyCharSkill("goetterkulte", hero, 1); debugLog("Trying to increase skill goetterkulte, current " + gk + ", Roll " + r + "Result success"); } else { debugLog("Trying to increase skill goetterkulte, current " + gk + ", Roll " + r + "Result failed"); } } } }]]>
[/spoiler]

Die Regeln für diese Proben kann man durch eine Gliederung ("einrücken") und Zeilenumbrüche sicher ganz gut nachvollziehen.
Aber eine Referenz für die Funktionen und Variablen wäre notwendig um ein solches Gebilde selbst schreiben zu können.

Eine "Howto" wäre natürlich das Sahnehäubchen. :D


2. Gibt es ja den Sammelthread Feature Requests
Sammelthread Feature Requests

Mein Anliegen wäre es, dass die Modding-Möglichkeiten es erlauben würden, möglichst viel davon ggf. in Eigenregie auf die Beine zu stellen.

Es wäre fantastisch, wenn du die Liste mal überfliegen könntest und ggf. für den einen oder anderen Punkt die technischen Voraussetzungen schaffen könntest damit man ihn später implementieren könnte.

Beispiel:
Portrait-Bilder für wichtige NPC Begegnungen und Events:
Nicht die Bilder sind wichtig, sondern die technische Möglichkeit sie später einzufügen und zu plazieren.

anderes Beispiel:
MIN/MAXen erschweren durch neue Proben:
Nicht die Proben sind wichtig, sondern die Möglichkeit sie selbst zu definieren, zu plazieren und selbst Konsequenzen aus dem Ergebnis einer Probe festzulegen.

Verfasst: 04. Dez 2013, 15:21
von Fujak Loganson
[quote='Gerion','index.php?page=Thread&postID=64029#post64029']Aber eine Referenz für die Funktionen und Variablen wäre notwendig um ein solches Gebilde selbst schreiben zu können.[/quote]
Nachdem ich um Erlaubnis gefragt habe setzte ich mich Morgen/Übermorgen hin und schreibe einfach soviel ich dazu selbst weiß in eine kurze Dokumentation. craftyfirefox kann dann immer noch korrigieren/ergänzen.

[quote='Gerion','index.php?page=Thread&postID=64029#post64029']Eine "Howto" wäre natürlich das Sahnehäubchen.[/quote]
Was genau verstehst du denn unter einer How-To? Bzw. wo genau siehst du den Unterschied zu einer Dokumentation?

Verfasst: 04. Dez 2013, 22:46
von Gerion
Unter einer Referenz der Funktionen und Variablen würde ich eine Reihe von Tabelle verstehen,
in denen die zur Verfügung stehenden Funktionen inkl. Namen, Zweck, Variablen, Wertebereich usw. aufgelistet sind:

Beispiel:

Code: Alles auswählen

FUNKTIONEN
Name			Zweck					Variablen (Funktion)		
-----------------------------------------------------------------------------------------------------------------------------------------------------
setSpecialState		????					X,Y (????)			
rollCheck		Sucht Helden anhand von Eigenschaften	"who":hero" (Held), "type":"skill" (Talent),"wich":"selbstbeh" (Selbstbeherrschung), "mod":(???)
getCharAttribute	Liest Eigenschaft			"EIGENSCHAFT",HELD,???
getCharSkill		Liest Talent				"TALENT",HELD
rollRandom		generiert Zufallszahl			KLEINSTE-ZAHL,GROESSTE-ZAHL
modifyCharAttribute	Ändert Eigenschaft			"EIGENSCHAFT",HELD
debugLog		Schreibt Debug Meldung in Logfile	"TEXT"
usw.

Code: Alles auswählen

VARIABLEN
Name			Zweck
----------------------------------------------------------------------------------------------------------
hero			Heldenname
skill			Talent
selbstbeh		Talent:Selbstbeherrschung
geschichte		Talent:Geschichte
goetterkulte		Talent:Götterkulte
usw.
Unter einer "Howto" stelle ich mir eine Art Anleitung (Kochrezept) vor,
wie man alle notwendigen Schritte durchführt um von "einem weißen Blatt Papier",
zu einer fertigen Mod gelangt.

Am Besten anhand eines Beispiels z.B. die "Lobpreisungen".


Ich habe mir mal einen "Code Block" aus den Lobpreisungen herausgesucht und so umformatiert,
dass ich ihn einigermaßen lesen kann:
[spoiler]

Code: Alles auswählen

 0 ) return text;
	return getLangString( text, [getName(hero)]); 
} 


function hasresponse(which) {
	if(which == 1) return true; 
	if(which == 2) {
		dif = 0; 
		dif++; 
		setSpecialState("lobpreisungen", dif); 
		var res = rollCheck({
			"who":hero, "type":"skill", "which":"selbstbeh", "mod":-1*dif
		}); 
		return res.ok; 
	} 
} 


function after(selid) {
	var ag = getCharAttribute("AG",hero,0);
	var gs = getCharSkill("geschichte",hero);
	var gk = getCharSkill("goetterkulte",hero);
	var r;
	if(ag > 2) { 
		r = rollRandom(1,20);
		if(r  gs) { 
				modifyCharSkill("geschichte", hero, 1);
				debugLog("Trying to increase skill geschichte, current " + gs + ", Roll " + r + "Result 

success"); 
			} else { 
				debugLog("Trying to increase skill geschichte, current " + gs + ", Roll " + r + "Result 

failed"); 
			}
		} else { 
			r = rollRandom(1,6) + rollRandom(1,6) + rollRandom(1,6); 
			if(r > gs) { 
				modifyCharSkill("geschichte", hero, 1);
				debugLog("Trying to increase skill geschichte, current " + gs + ", Roll " + r + "Result 

success");
			} else { 
				debugLog("Trying to increase skill geschichte, current " + gs + ", Roll " + r + "Result 

failed"); 
			}
		}
	}

	if(gk  gk) { 
				modifyCharSkill("goetterkulte", hero, 1); 
				debugLog("Trying to increase skill goetterkulte, current " + gk + ", Roll " + r + "Result 

success");
			} else { 
				debugLog("Trying to increase skill goetterkulte, current " + gk + ", Roll " + r + "Result 

failed");
			}
		} else { 
			r = rollRandom(1,6) + rollRandom(1,6) + rollRandom(1,6); 
			if(r > gk) { 
				modifyCharSkill("goetterkulte", hero, 1); 
				debugLog("Trying to increase skill goetterkulte, current " + gk + ", Roll " + r + "Result 

success"); 
			} else { 
				debugLog("Trying to increase skill goetterkulte, current " + gk + ", Roll " + r + "Result 

failed"); 
			}
		}
	}
}

]]>
[/spoiler]

Dazu hätte ich folgende Fragen:
1. Um welche Programmiersprache handelt es sich hier?
2. Ist ein solcher Code-Block jeweils autonom, oder kann es sein, dass ein solcher Code-Block Funktionen eines andere Code-
Blocks der selben xml-Datei verwendet?
3. Kann man den Block auch mit Zeilenumbrüchen und Einrückungen schreiben, oder muss er in der xml-Datei immer ein
"Einzeiler" sein?

Verfasst: 05. Dez 2013, 02:08
von HSishi
Soweit ich dieses "Code-Kauderwelsch" (ich kenne auch nicht die korrekte Bezeichnung, man möge es mir verzeihen) verstehe, könnte man in dem Beispiel die Zeilen 3 bis 6 in einen Einzeiler packen.

Für den Code selbst sind Leerzeilen und Einrückungen (Tabs oder Leerzeichen) unerheblich; sie erleichtern allerdings (saubere Benutzung vorausgesetzt) die Lesbarkeit der Verschachtelungen.


Vor lauter Leerzeilen und Zeilenrücksprüngen ist das Beispiel allerdings schon wieder unleserlich, da zusammengehörende Teile auseinandergezogen sind.

Daß die Forumssoftware den Contentbereich so schmal hält, hilft auch nicht viel - ich könnte meinen Browser (Firefox, aktuellste Beta) auf 1920 Pixel Fensterbreite aufziehen und der Content wäre trotzdem nur die halbe Fensterbreite, mit dickem Rand links und rechts.
Kann man daran nicht etwas machen, evtl. ne Einstellung oder variabel in Abhängigkeit der Fenstergröße?

*Edit* Ok, ich habe grade festgestellt, daß es an dem gewählten Board-Layout liegt. Leider habe ich mit dem "Avalon"-Layout das zwar angenehmste (dunkle Hintergründe), aber leider schmalste Layout ausgewählt ...

Verfasst: 05. Dez 2013, 10:30
von Fujak Loganson
[quote='HSishi','index.php?page=Thread&postID=64341#post64341']Vor lauter Leerzeilen und Zeilenrücksprüngen ist das Beispiel allerdings schon wieder unleserlich, da zusammengehörende Teile auseinandergezogen sind.[/quote]
"hanging paragraph" style ist eigentlich gängig anerkannte Praxis und für Editoren, nicht für Foren gedacht. Aber gut, was wissen schon Millionen von Programmierern weltweit?

[quote='Gerion','index.php?page=Thread&postID=64305#post64305']Um welche Programmiersprache handelt es sich hier?[/quote]
Genau, oder "einfach erklärt"? Soweit ich informiert bin handelt es sich um eine auf der Jurrasic Engine basierende Umsetzung von ECMAScript, erweitert um spezifische Funktionen für die Schicksalsklinge.
Wichtig ist das sich die effects(.xml) und die de_dlg(.xml) in ihrem Funktionsumfang unterscheiden.

[quote='Gerion','index.php?page=Thread&postID=64305#post64305']Ist ein solcher Code-Block jeweils autonom[/quote]
Ein klares Jain. Code innerhalb eines Dialog-Events (gleicher "partner"-tag) kann zwar auf den Stack des gleichen Events zurückgreifen, aber es ist auch möglich in bestimmte IDs zu springen, dann kann es zu Komplikationen kommen.
Beispiel: Reise31_Ork_Monolith. In ID 1 wird die Variable discoverer definiert/initialisiert und mit vernünftigem Inhalt belegt. ID 7 greift dann nochmals auf diese zu. Würde man den Dialog aber mit ID 7 starten, hätte man logischer Weise ein Problem.

[quote='Gerion','index.php?page=Thread&postID=64305#post64305']Kann man den Block auch mit Zeilenumbrüchen und Einrückungen schreiben[/quote]
In gewissen Grenzen kann man relativ frei formatieren.

Edit: Blöde Frage, aber auf Englisch ist es ok, oder? Also die Funtion Reference

Verfasst: 05. Dez 2013, 11:49
von HSishi
Wie gesagt, Fujak, sauber verwendet erleichtert es die Lesbarkeit. Wenn ich rudimentäre Scripts z.B. für AutoHotkey oder UI-Definitionen für EQ erstelle, benutze ich ebenfalls Einrückungen und Leerzeilen. Notepad++ hilft mir durch farbliche Kennzeichnung zu erkennen, ob ich Abschlußklammern etc. vergessen habe.

An den ersten beiden Functions aus dem Beispiel gibt's auch nix auszusetzen, nur die gesondert geschriebenen Failed"); und success"); Zeilen stehen mit den vorgehenden Leerzeilen etwas "verloren" da. Aber das ist mein persönliches Empfinden.
Wenn das gängigem Standard entspricht und geübte Programmierer damit kein Problem haben, soll es mir recht sein.

Verfasst: 05. Dez 2013, 12:01
von Fujak Loganson
[quote='HSishi','index.php?page=Thread&postID=64379#post64379']nur die gesondert geschriebenen Failed"); und success"); Zeilen stehen mit den vorgehenden Leerzeilen etwas "verloren" da[/quote]
Was bei den, wie bereits erwähnten, Editoren nicht passiert, denn dort verwendet man in der Regel keinen Zeilenumbruch.

Verfasst: 05. Dez 2013, 16:24
von Ali Bengali
Eine Frage zum Modding an den Firefox:
Ich wüsste gerne, ob man beim Einfügen eigener 2D-Bilder zum Ersetzen der Szenen wie Taverne, Tempel oder Nachtlager auch .gif's oder sogar kleine Videos einfügen kann.

Hintergrund der Frage:
In der Originaltrilogie gab es eine Reihe kleiner Animationen in diesen Bildszenen, wie blinzelnde Augen und dergleichen. So etwas würde ich gern wieder ins Spiel modden. Vielleicht sogar die Szenen aus den Originalspielen selbst.

Wäre perfekt wenn das möglich wäre. So wäre das Ganze nicht nur auf "Standbilder" beschränkt und hätte erheblich größere Möglichkeiten.

EDIT: Zusatzfrage: Wie sieht es eigentlich mit der Austauschbarkeit der einzelnen Musiktitel aus? Kann man dafür eine Art Override-Verzeichnis zur Verfügung stellen? Spielmusik ersetzen gegen Tracks nach eigener Wahl wäre ein feines Feature. Das würde z.B. auch ermöglichen, die Kampfmusik individuell gegen einen Ambient-Soundtrack zu ersetzen, wie andernorts diskutiert. Für mich käme das persönlich jedenfalls sehr in Frage... Zudem würde ich dann manche Titel durch meine Favoriten aus Sternenschweif oder Riva ersetzen. Wäre ein weiterer feiner Weg, Individualisierbarkeit des Spielerlebnisses zu gewährleisten.

Verfasst: 05. Dez 2013, 20:25
von Gerion
@Fujak
Ersteinmal vielen Dank, dass Du Dir die Mühe machst.
Hoffe, dass sich viele fleißige Finger finden denen dadurch der Einstieg erleichtert wird.
Edit: Blöde Frage, aber auf Englisch ist es ok, oder? Also die Funtion Reference
Gern auf Englisch.
Soweit ich informiert bin handelt es sich um eine auf der Jurrasic Engine basierende Umsetzung von ECMAScript, erweitert um spezifische Funktionen für die Schicksalsklinge.
*Urgs* interessante Wahl... Ich hoffe dafür brauchbare Tutorials im Web zu finden.

@HSishi
nur die gesondert geschriebenen Failed"); und success"); Zeilen stehen mit den vorgehenden Leerzeilen etwas "verloren" da
Hat der böse Forumseditor umgebrochen. :(
In meiner Originaldatei stehen die Stellen am Ende der Vorzeile.
Also da wo sie hingehören. ;)

Verfasst: 05. Dez 2013, 21:07
von craftyfirefox
@"interessante Wahl": Vereinfacht ausgedrückt ist es Javascript, die selbe Sprache, die man auch für jede interaktive Website verwendet und die jeder Browser beherrscht. Und ich dachte mir "das ist noch um einiges weiter verbreitet als Lua" - wobei ich gestehe, dass mir meine 15 Jahre Javascript-Erfahrung da auch irgendwie ein etwas "schiefes" Bild vermitteln könnten ;).

@Ali, Bewegte Bilder: Grundsätzlich sind statische Bilder kein Problem, dafür hab ich gleich mal einen "Reader" gebastelt, aber da am ehesten PNG oder JPG - GIF ist ein ... blödes Format. Bei Movies bzw. bewegten Bildern wird das "einfach so" nicht klappen, das müsste man dann ähnlich wie die ganzen Szenen über ein "unitypackage", sprich über einen Export in ein AssetBundle (Tool kommt da noch von uns) machen - und das klappt nur mit Unity Pro. Klar, mit Trial geht das auch easy, und ich bin mir sicher es lassen sich auch ... nennen wir es "Ansätze" finden, bei denen man nichtmal Unity Pro braucht. Aber einfach ein Animated Gif reinpacken und schwupps das geht wirds leider nicht spielen, sorry, die Unity ist kein Webbrowser ;).

Verfasst: 05. Dez 2013, 23:00
von HSishi
Der Wiki-Link auf ECMAScript leitet sogar zum JavaScript-Artikel weiter ;) .

Ah, die Forumsdarstellung dann ... ok, entweder mein gewähltes Layout ("Avalon ...") oder allgemein Zeile zu lang. Sah halt irgendwie komisch aus, weil vor dem "Failed" und "Success" noch ne extra Leerzeile dargestellt wurde.
Aber dann habe ich nichts gesagt und bitte (erneut) um Nachsicht :) .

Verfasst: 06. Dez 2013, 09:09
von Ali Bengali
@Chris:
Danke für die Antwort.

Wie sieht es mit der Austauschbarkeit der Musiktracks aus?

Verfasst: 06. Dez 2013, 14:33
von Fujak Loganson
[quote='craftyfirefox','index.php?page=Thread&postID=64473#post64473']GIF ist ein ... blödes Format.[/quote]
Ich stimme dir voll und ganz zu ;)

[quote='craftyfirefox','index.php?page=Thread&postID=64473#post64473'] Bei Movies bzw. bewegten Bildern wird das "einfach so" nicht klappen, das müsste man dann ähnlich wie die ganzen Szenen über ein "unitypackage", sprich über einen Export in ein AssetBundle (Tool kommt da noch von uns) machen - und das klappt nur mit Unity Pro.[/quote]
Jain, es geht auch mit Unity Free, aber zugegeben umständlich und die Mühe definitiv nicht wert.

Verfasst: 06. Dez 2013, 17:34
von Fujak Loganson
Kurz zum testen, klappt das so als Google Doc? Ich hoffe ich habe es richtig gesetzt, jeder kann es lesen (auch ohne GMail account), aber nicht editieren?

Verfasst: 06. Dez 2013, 17:58
von Fujak Loganson
Irgend was war gerade komisch, wie wenn jemand anderes noch editiert hätte. ^^
Ich versuche es Morgen weiter, so sieht jeder wie langsam ich bin (falls es nicht von jemandem gelöscht wird) ;)

Verfasst: 06. Dez 2013, 20:28
von Gerion
Sieht seeeeehhhr vielversprechend aus :thumbsup:

Verfasst: 07. Dez 2013, 17:50
von Fujak Loganson
Ich habe doch versucht meine "Doku" sehr ähnlich dazu aufzubauen, oder vermisst du da etwas entscheidendes?
Ich bin schlicht noch nicht fertig, vor allem da ich oft Dinge überprüfen muss, falls/wo sich etwas geändert hat und Bugs auf die ich noch stoße immer fleißig melde.

Falls dir etwas konkretes fehlt, oder die Beispiele nicht deutlich genug sind, bitte eine Rückmeldung wie du dir das in etwa konkret vorstellen würdest, an einem meiner Beispiele.