Archiv verlassen und diese Seite im Standarddesign anzeigen : [DynRPG] RPGSS
Einführung
Das Role Playing Game Scripting System (RPGSS) ist ein Plugin für Cherrys DynRPG (http://www.multimediaxis.de/threads/134256-DynRPG-Das-RM2k3-Plugin-SDK) (RM2k3 Plugin SDK). RPGSS ist eine (mehr oder weniger) komplette Skriptumgebung mit Lua (http://www.lua.org/) als Skriptsprache, am ehesten vergleichbar mit dem RGSS (Ruby Game Scripting System), der Skriptumgebung für den RPG Maker XP.
Features
Lua statt C++. Lua ist sehr einfach zu erlernen, mächtig, robust, erweiterbar, weit verbreitet (sogar im kommerziellen Bereich (http://en.wikipedia.org/wiki/Lua_(programming_language)#Video_games)) und sehr schnell (LuaJIT (http://luajit.org/) übersetzt Lua Code zur Laufzeit in Maschinencode).
Schnelle und produktive Entwicklung von Erweiterungen, sowie unkomplizierte Wartung. Eine Erweiterung ist nichts anderes als eine menschenlesbare Lua-Quellcodedatei.
Aussagekräftige Fehlermeldungen und ein detaillierter Stack Traceback, sollte mal etwas schiefgehen, stehen dem Entwickler zur Seite.
Ein großer Teil der DynRPG API aus Lua heraus verfügbar.
Umfangreiche, essentielle Bibliotheken mit einer einfach zu erlernenden Schnittstelle stehen dem Entwickler out-of-the-box zur Verfügung.
Schnelle und mächtige Grafikroutinen eröffnen neue Möglichkeiten bei der Grafikprogrammierung. True Color Bilder mit Alphakanal, Blend Modes, Bitmap Fonts, Window Skins, grafische Primitive, etc.
Auslagerung von performancekritischem Event Code nach Lua kann die Laufzeiteigenschaften erheblich verbessern. Event Code ist für häufiges Aktualisieren von Variablen und Switches, sowie grundsätzlich für Berechnungen äußerst ungeeignet. Mit Lua steht eine echte Programmiersprache und mit LuaJIT eine Ausführungsgeschwindigkeit, die sogar C/C++ Konkurrenz machen kann, zur Verfügung.
Screenshots
http://share.cherrytree.at/showfile-14216/bla1.pnghttp://share.cherrytree.at/showfile-14218/bla2.pnghttp://share.cherrytree.at/showfile-14425/bla.pnghttp://share.cherrytree.at/showfile-14217/bla3.pnghttp://share.cherrytree.at/showfile-14383/bla.png
Roadmap
Verbessere die Dokumentation. (Priorität: Hoch)
Stelle mehr Skripte zur Verfügung. (Priorität: Hoch)
Stelle mehr Grafikroutinen zur Verfügung. (Priorität: Mittel)
Optimiere die Grafikroutinen noch weiter. (Priorität: Mittel)
Stelle eine räumliche Audiobibliothek zur Verfügung. (Priorität: Niedrig)
Quellcode
Check out RPGSS on GitHub (https://github.com/kyuu/dynrpg-rpgss)
Dokumentation
Check out RPGSS docs on GitHub (https://github.com/kyuu/dynrpg-rpgss/tree/master/docs)
Alternativ liegt den Releases immer der Programmer's Guide im PDF-Format vor.
Downloads
Achtung: RPGSS benötigt DynRPG 0.20. Im Moment gibt es davon nur eine Testversion, die ihr hier (http://www.multimediaxis.de/threads/134256-DynRPG-Das-RM2k3-Plugin-SDK?p=3137414&viewfull=1#post3137414) herunterladen könnt.
rpgss-0.5.0.7z (http://share.cherrytree.at/showfile-14140/rpgss_05.7z)
rpgss-0.5.1.7z (http://share.cherrytree.at/showfile-14214/rpgss_05.7z)
rpgss-0.5.2.7z (http://share.cherrytree.at/showfile-14215/rpgss_05.7z)
rpgss-0.6.0.7z (http://share.cherrytree.at/showfile-14422/rpgss_06.7z)
rpgss-0.7.0.7z (http://share.cherrytree.at/showfile-14800/rpgss_07.7z)
rpgss-0.8.0.7z (http://share.cherrytree.at/showfile-15322/rpgss_08.7z)
rpgss-0.9.0.7z (http://share.cherrytree.at/showfile-15773/rpgss_09.7z)
Lizenz
The MIT License (MIT) (http://opensource.org/licenses/mit-license.html)
goldenroy
24.04.2014, 23:52
Holy! o_____o Das muss ich mir erstmal genauer ansehen, aber anhand der Screenshots (wie hier z.B. (http://www.multimediaxis.de/threads/134256-DynRPG-Das-RM2k3-Plugin-SDK?p=3164244&viewfull=1#post3164244)) könnte das das Next-Big-Thing nach DynRPG werden!
Ich hoffe du hast das auch bei rmn vorgestellt. :>
G-Brothers
25.04.2014, 00:11
Gosch... Es wird immer sinnloser, zu einem neueren Maker zu wechseln. :'D
Zu allererst, tut mir Leid, dass der Startbeitrag auf den ersten Blick etwas wenig Informationen beinhaltet. Ich werden heute oder morgen Abend diesen noch aktualisieren und mit mehr Informationen (und Screenshots, um das Ding schmackhafter zu machen) versehen. Bis dahin bitte ich die Interessierten sich die, dem Release beigelegte Dokumentation "Programmer's Guide" anzusehen. Diese enthält bereits genug Informationen um zumindest etwas damit anfangen zu können, vorsichtig ausgedrückt.
Holy! o_____o Das muss ich mir erstmal genauer ansehen, aber anhand der Screenshots (wie hier z.B. (http://www.multimediaxis.de/threads/134256-DynRPG-Das-RM2k3-Plugin-SDK?p=3164244&viewfull=1#post3164244)) könnte das das Next-Big-Thing nach DynRPG werden!
Hey, danke für das Kompliment! Es muss sich leider noch außerhalb meines Testprojektes beweisen, aber ich bin zuversichtlich, dass es zumindest dem ein oder anderen hilfreich sein wird, da es doch einige Features bietet, die so noch in keinem DynRPG Plugin realisiert worden sind, AFAIK. 24-bit Images mit Alphakanal!!! (Okay, man sieht im Endeffekt nur 16-bit, da der RPG Maker Framebuffer nur 16-bit unterstützt...aber immerhin keine 8-bit!)
Ich hoffe du hast das auch bei rmn vorgestellt. :>
Ne, bin da gar nicht registriert. Sind die cool? :D
da es doch einige Features bietet, die so noch in keinem DynRPG Plugin realisiert worden sind, AFAIK. 24-bit Images mit Alphakanal!!! (Okay, man sieht im Endeffekt nur 16-bit, da der RPG Maker Framebuffer nur 16-bit unterstützt...aber immerhin keine 8-bit!)
:A
Das wollt ich damit schon lang machen. Kam aber nie dazu. Das schöne ist, dass solche Ideen deswegen nicht unumgesetzt bleiben - jetzt hast du es gemacht.
Sehr cool auf jeden Fall.
goldenroy
25.04.2014, 14:47
Ne, bin da gar nicht registriert. Sind die cool? :D
Die haben quasi n eigenes Unterforum fast ausschließlich wegen DynRPG-Plugins aufgemacht. Man kann also sagen, das die sowas begrüßen. xD
Frage: In der Doku steht, dass DynRPG lahm ist was das Grafiken anzeigen angeht, du benutzt aber doch DynRPG als Schnittstelle. Womit kriegst du deine 24-Bit Bilder mit Alphakanal und Blending so schnell gezeichnet? Ich dachte immer, dass der Maker lahm ist liegt dran, dass Pixel für Pixel in den Buffer geschoben werden anstatt der Grafikkarte einen Sprite in die Pipeline zu schieben.
Die haben quasi n eigenes Unterforum fast ausschließlich wegen DynRPG-Plugins aufgemacht. Man kann also sagen, das die sowas begrüßen. xD
Awesome, ich guck mal bei Gelegenheit vorbei.
Frage: In der Doku steht, dass DynRPG lahm ist was das Grafiken anzeigen angeht, du benutzt aber doch DynRPG als Schnittstelle.
Was Grafik angeht, benutze ich DynRPG nur um auf den Framebuffer zuzugreifen, für den Rest habe ich eigene Grafikroutinen.
Womit kriegst du deine 24-Bit Bilder mit Alphakanal und Blending so schnell gezeichnet? Ich dachte immer, dass der Maker lahm ist liegt dran, dass Pixel für Pixel in den Buffer geschoben werden anstatt der Grafikkarte einen Sprite in die Pipeline zu schieben.
Das ist korrekt, nur können geeignete Datenstrukturen + Algorithmen nochmal eine Menge herausholen. Ich mache auch nichts anderes als (im Endeffekt) Pixel für Pixel in den Buffer zu schieben, den Unterschied macht die Vorarbeit. Der Maker kann ziemlich schnell Pixel in den Buffer schieben, solange keine Transparenz und keine Transformationen im Spiel sind. Außerdem habe ich stellenweise (wo es sich lohnt) SIMD-Optimierungen drin (Single Instruction Multiple Data, d.h. ich berechne/schiebe mehrere Pixel gleichzeitig), was nochmal eine Menge Performance bringt. Übrigens kann man, denke ich, da noch einiges rausholen, nur will ich im Moment keine Zeit dafür aufbringen.
So, Startbeitrag aktualisiert und es gibt eine neue Version (0.5.2), die ein paar Bugs fixt. Sorry, dass es so lange gedauert hat. Ich hatte es in den letzten Tagen mit einem äußerst subtilen GCC-Bug zu tun, der dafür sorgt, dass im Release Build sehr ineffizienter Code generiert wird (zumindest an einer Stelle). Dadurch war ich gezwungen an einer Stelle den Code, der in performancekritischen Schleifen verwendet wird in Inline Assembler zu schreiben. Ich werde in den nächsten Tagen nochmal an anderen Stellen den von GCC generierten Code inspizieren müssen...
Davy Jones
29.04.2014, 01:05
Ziemlich krass =0
Ich bin zur Zeit dabei ein paar Tutorials zu schreiben und bei den grafischen Möglichkeiten lohnt sich natürlich ein Lightmap-Tutorial. Dazu bräuchte ich eine Map, zusammen mit einer passenden Lightmap, nur... ich habe noch nie Lightmaps erstellt und meine Mappingkünste lassen auch zu wünschen übrig. Könnte mir jemand, der im Mapping und in Lightmaps geübt ist, hier unter die Arme greifen und mich mit einer Map inklusive einer passenden Lightmap versorgen? Die Map sollte einen Raum in einem Gebäude darstellen, möglichst düster, und größer als 20 x 15 Tiles sein. Es können auch mehrere Räume, d.h. mehrere Maps, die mehrere, zugängliche Räume darstellen, sein.
Als Entwickler eines freien RPG Maker 2k(3)-Nachbaus graust es mir, wenn ich solche Entwicklungen sehe :). Aber dennoch Respekt vor dieser Leistung, ist schon eine echt coole Sache. Falls ich jemals das Verlangen haben sollte, ein komplexeres DynRpg-Plugin zu schreiben, werde ich es wohl aus Gründen der Zeitersparnis in Lua machen.
Die von dir gewählte Lizenz (GPL) ist übrigens eine schlechte Wahl, weil RPG_RT unfreie Software ist und es ein Lizenzverstoß ist, ein GPL-Plugin in nicht-freie Software hereinzuladen ;). Musst eine "GPL linking exception" für diesen Fall definieren.
Als Entwickler eines freien RPG Maker 2k(3)-Nachbaus graust es mir, wenn ich solche Entwicklungen sehe :).
Ach, das ist nur blindes Herumstochern. Sollte EasyRPG mal soweit sein, wird das alles schnell Geschichte. ;-) Ich wünsche euch viel Erfolg dabei!
Die von dir gewählte Lizenz (GPL) ist übrigens eine schlechte Wahl, weil RPG_RT unfreie Software ist und es ein Lizenzverstoß ist, ein GPL-Plugin in nicht-freie Software hereinzuladen ;). Musst eine "GPL linking exception" für diesen Fall definieren.
Hm, da bin ich mir unsicher, ob diese linking exception bei so einem Drittanbieter-Plugin wirklich benötigt wird, der schließlich nicht offiziell und nicht direkt von der RPG_RT verwendet wird. Aber ich wollte eh noch zur MIT wechseln. Thanks for the heads-up!
Prototyping in RPGSS:
http://share.cherrytree.at/showfile-14383/bla.png
Check it out! (http://share.cherrytree.at/showfile-14384/rpgs.7z)
IndependentArt
09.05.2014, 08:06
Schnelle und mächtige Grafikroutinen eröffnen neue Möglichkeiten bei der Grafikprogrammierung. True Color Bilder mit Alphakanal, Blend Modes, Bitmap Fonts, Window Skins, grafische Primitive, etc.
Heißt das, ich kann nach Installation einfach so Bilder mit Alphakanal und 24bit benutzen ...? You kidding me ...?
Heißt das, ich kann nach Installation einfach so Bilder mit Alphakanal und 24bit benutzen ...? You kidding me ...?
Nicht im Maker an sich - aber in RPGSS-PlugIns, die du schreibst ;)
PeAcE
MorDen
Nochmal 'ne Frage: Ich war bisher auf dem Stand, dass zu neue GCC-Versionen kein ordentliches DynPlugin produzieren, du benutzt aber die Prozessorarchitekturabfrage von 4.8.0+ ~ Was habe ich verpasst / wo ist der Kniff?
Nicht im Maker an sich - aber in RPGSS-PlugIns, die du schreibst ;)
Plugin klingt so nach C++... Ich nenne sie lieber Skripte. ;)
Heißt das, ich kann nach Installation einfach so Bilder mit Alphakanal und 24bit benutzen ...? You kidding me ...?
Wie Morden bereits gesagt hat, direkt im RPG Maker nicht, aber aus einem Lua-Skript. Ich versuche mal heute ein Skript zu schreiben, mit dem man Bilder aus dem Event Code anzeigen und manipulieren kann, sollte nicht so aufwändig sein.
Nochmal 'ne Frage: Ich war bisher auf dem Stand, dass zu neue GCC-Versionen kein ordentliches DynPlugin produzieren, du benutzt aber die Prozessorarchitekturabfrage von 4.8.0+ ~ Was habe ich verpasst / wo ist der Kniff?
Dyn 0.20 funktioniert doch offiziell mit GCC-Versionen 4.7.1+:
This DynRPG version only works with GCC version 4.7.1 and higher.
Und danke, BTW. Mir war gar nicht bewusst, dass __builtin_cpu_supports erst seit GCC 4.8.0 zur Verfügung steht. Da werde ich noch einen Workaround für ältere GCC-Version einbauen müssen.
MagicMaker
09.05.2014, 11:03
Prototyping in RPGSS:
[...]
Habs mal ausprobiert, ist echt schick.
Aber gehört sich das so, dass es deutlich bemerkbar langsamer läuft, wenn der Radius sich erhöht? °-°'
Ja, das ist OK so. Ist nur ein Prototyp, komplett in Lua geschrieben und soll zeigen, wie einfach und schnell sowas in Lua/RPGSS geht und einen Ausblick auf die neue Grafikroutine geben, die später in C++ implementiert wird. Bei einem Radius von 100 werden da übrigens 100*100*PI = über 31000 Pixel pro Frame berechnet, wobei pro Pixel eine Menge Operationen und trigonometrische Funktionen involviert sind.
Edit: BTW, wenn jemand Fragen, Anregungen oder Wünsche bezüglich RPGSS hat: nur her damit. Ich habe mir mit der Dokumentation Mühe gegeben, aber da ich der Entwickler bin, ist es durchaus möglich, dass es da noch einen Haufen Sachen gibt, die aus der Sicht eines anderen noch unklar sind oder gänzlich fehlen, aber zum Verständnis wichtig sind. Also, nur keine Scheu!
IndependentArt
10.05.2014, 09:15
Ich versuche mal heute ein Skript zu schreiben, mit dem man Bilder aus dem Event Code anzeigen und manipulieren kann, sollte nicht so aufwändig sein.
wie würde das dann zu bedienen sein ?
ich kann eben leider nichts selbst dafür schreiben, aber ich lutsch dir ernsthaft die füße, wenn du das hinbekommst.
Neuer Release
rpgss-0.6.0.7z (http://share.cherrytree.at/showfile-14422/rpgss_06.7z)
Changes between 0.6.0 and 0.5.2
-------------------------------
* Changed license to the MIT license.
* Removed unused field in graphics::Image.
* Made blend mode a function argument instead of a state.
* Renamed rotation constants to "cw" and "ccw" for consistency.
* Fixed wrong argument indices in Image:getPixel and Image:setPixel.
* Vec2::rotateBy now respects that our y-axis goes down and not up.
* Memory file constructors that take a buffer now behave as expected.
* Added initial set of assets.
* Added CHANGELOG.
@IndependentArt
Hat doch etwas länger gedauert als gedacht (wie immer ^^). Aaaber: Im neuen Release findest du ein paar Skripte mit denen sich Bilder (Sprites) ähnlich (aber viel besser) wie Pictures im Maker anzeigen und manipulieren lassen. Beim Speichern/Laden werden die Sprites auch gespeichert/geladen.
How To
Installiere RPGSS (Siehe den Punkt "Installing RPGSS" in docs/Programmer's Guide.pdf).
Kopiere den Ordner Scripts (zu finden im Ordner assets) in dein Spielverzeichnis.
Erstelle eine neue Datei namens boot.lua in ~/spielverzeichnis/Scripts mit dem folgenden Inhalt:
require "std.world"
require "std.spritelib"
function onTitleScreen()
world = World.new()
end
function onLoadGame(id, data)
world:loadState(data)
end
function onSaveGame(id)
return world:saveState()
end
function onSceneDrawn(scene)
world:update()
world:render()
end
Das war's! Nun solltest du aus Event-Kommentaren heraus die Sprite-Bibliothek (Scripts/std/spritelib.lua) benutzen können, mit der folgenden Schnittstelle:
Sprite-Bibliothek
(Parameter mit gleichen Bezeichnungen werden nur einmal beschrieben.)
@call spritelib_add, name, filename, blend_mode, visible, z, x, y, scale, angle
Fügt ein neues Sprite mit den angegebenen Eigenschaften hinzu.
name: Eine Zeichenkette, die den Namen des neuen Sprites repräsentiert. Statt über eine numerische ID wie bei Maker-Pictures, werden Sprites über eine Zeichenkette angesprochen. Über den hier vergebenen Namen kannst du den Sprite mit Hilfe der nachfolgenden Befehle manipulieren.
filename: Eine Zeichenkette, die den Dateinamen des Bildes, welches für den Sprite verwendet werden soll, repräsentiert. Wichtig: Anders als im Maker muss hier der volle Dateiname angegeben werden. Also nicht "MeinBild", sondern "Picture/MeinBild.png". Das Bild darf dabei natürlich auch in einem anderen Ordner liegen als Picture, solange du den korrekten Pfad angibst. "MeineBilder/MeinUnterordner/MeinUnterUnterOdner/MeinBild.png" ist auch OK.
blend_mode: Eine Zeichenkette, die definiert wie der Sprite gezeichnet werden soll. Mögliche (und nur diese) sind: "set", "mix", "add", "subtract" und "multiply".
visible: Ein boolescher Wert (0 oder 1), der definiert of der Sprite sichtbar ist, oder nicht. Die 1 macht ihn sichtbar, die 0 unsichtbar.
z: Eine beliebige ganze Zahl (auch negative), die den Z-Wert des Sprites angibt. Der Z-Wert definiert an welcher Stelle ein Sprite gezeichnet wird. Wenn zwei Sprites sich überlappen und einer davon einen niedrigeren Z-Wert hat, als der andere, dann wird der Sprite mit dem niedrigeren Z-Wert als letztes gezeichnet und verdeckt damit den Sprite mit dem höheren Z-Wert.
x, y: Eine Zahl, die die X-, bzw. die Y-Position des Sprites angibt. Wie die Position eines Sprites interpretiert wird, hängt von dem Koordinatensystem ab, in dem der Sprite sich befindet. Siehe weiter unten spritelib_set_coordinate_system.
scale: Eine Zahl, die die Skalierung des Sprites in Prozent angibt. Die Zahl 100 würde bewirken, dass der Sprite in seiner normalen Größe gezeichnet wird. Die Zahl 20 würde bewirken, dass der Sprite auf 20% seiner normalen Größe schrumpft.
angle: Eine Zahl, die den Winkel (0-360 Grad) des Sprites angibt.
@call spritelib_remove, name
Entfernt ein zuvor hinzugefügtes Sprite.
@call spritelib_set_texture, name, filename
Tauscht das Bild, das für den Sprite eingestellt wurde, gegen ein anderes aus.
@call spritelib_set_blend_mode, name, blend_mode
Stellt den Blend Mode für den Sprite neu ein.
@call spritelib_set_coordinate_system, name, coord_sys
Stellt das Koordinatensystem für den Sprite neu ein.
coord_sys: Eine Zeichenkette, die das Koordinatensystem repräsentiert, anhand dessen die Position des Sprites interpretiert wird. Erlaubt sind momentan: "screen" und "map". Bei "map" bewegt sich der Sprite nicht mit der Kamera.
@call spritelib_get_visible, name, var
Gibt einen booleschen Wert (0 oder 1) zurück, der definiert ob der Sprite sichtbar ist, oder nicht.
var: Eine Zahl, die die ID der Variable angibt, in die der Wert, der zurückgegeben wird, geschrieben werden soll.
@call spritelib_set_visible, name, visible
Macht den Sprite sichtbar, bzw. unsichtbar.
@call spritelib_get_z, name, var
Gibt den aktuellen Z-Wert des Sprites zurück.
@call spritelib_set_z, name, z
Setzt den Z-Wert des Sprites neu.
@call spritelib_get_position, name, var_x, var_y
Gibt die aktuelle Position (X und Y) des Sprites zurück.
@call spritelib_set_position, name, x, y
Setzt die Position des Sprites neu.
@call spritelib_get_scale, name, var
Gibt die aktuelle Skalierung des Sprites (in Prozent) zurück.
@call spritelib_set_scale, name, scale
Setzt die Skalierung des Sprites neu.
@call spritelib_get_angle, name, var
Gibt den aktuellen Winkel des Sprites zurück.
@call spritelib_set_angle, name, angle
Setzt den Winkel des Sprites neu.
@call spritelib_move_by, name, ox, oy, ms, easing
Initiiert eine Bewegung des Sprites relativ zur aktuellen Position um einen Offset.
ox, oy: Eine Zahl (auch negative), die den Offset auf der X-, bzw. Y-Achse repräsentiert.
ms: Eine Zahl, die die Zeit in Millisekunden angibt, die die Bewegung dauern soll.
easing: Eine Zeichenkette, die angibt, wie die Bewegung interpoliert werden soll. Siehe Scripts/std/tween.lua für alle möglichen Zeichenketten (starten direkt am Anfang der Datei mit "linear").
@call spritelib_move_to, name, x, y, ms, easing
Initiiert eine Bewegung des Sprites von der aktuellen Position zu einer anderen absoluten Position.
@call spritelib_scale, name, scale, ms
Initiiert eine Skalierung des Sprites auf einen neuen Wert.
@call spritelib_rotate_by, name, direction, angle, ms
Initiiert eine Rotation des Sprites um einen Winkel (0-Unendlich).
direction: Eine Zeichenkette, die angibt, in welche Richtung die Rotation stattfinden soll. Definiert sind "cw" für "im Uhzeigersinn" und "ccw" für "im Gegenuhrzeigersinn".
@call spritelib_rotate_to, name, direction, angle, ms
Initiiert eine Rotation des Sprites zu einem bestimmten Winkel (0-360) hin.
@call spritelib_rotate_forever, name, direction, ms
Initiiert eine unendliche Rotation des Sprites. Der Parameter ms gibt hier die Zeit an, die eine volle Umdrehung dauern soll.
@call spritelib_stop_rotation, name
Stoppt eine eventuelle Rotation des Sprites, wobei dieser den aktuellen Winkel beibehält.
Edit: Ups, spritelib.lua hat einen kleinen Bug. Zeile 6 lautet
local sprite = Sprite.new(filename, blend_mode, visible, z, x, y, scale, angle)
Müsste aber
local sprite = Sprite.new(filename, blend_mode, visible, z, x, y, scale / 100, angle)
sein. Es fehlt "/ 100". Im Skript wird mit einer Skalierung im Bereich [0-1] gerechnet, d.h. 1.0 bedeutet 100%. Da der Maker Gleitkommazahlen nach außen hin nicht unterstützt, wird in der Schnittstelle die Skalierung immer mal 100, bzw. geteilt durch 100 genommen und in spritelib_add hat das noch gefehlt.
Ihr könnt den Bug selbst beheben, oder einfach die aktualisierte spritelib.lua (https://github.com/kyuu/dynrpg-rpgss/tree/master/assets/Scripts/std) aus dem Repository herunterladen.
Beispiel
(Jede Zeile ist ein eigener Event-Kommentar.)
@call spritelib_add, "foo", "Picture/foo.png", "mix", 1, 10, 160, 120, 150, 0
@call spritelib_rotate_forever, "foo", "cw", 1000
@call spritelib_scale, "foo", 50, 5000
Fügt einen neuen Sprite mit dem Namen "foo" hinzu und lässt ihn für immer im Uhrzeigersinn rotieren, wobei eine Umdrehung eine Sekunde dauert, sowie lässt ihn innerhalb von fünf Sekunden auf 50% (von ursprünglich 150%) schrumpfen.
Demo
http://share.cherrytree.at/showfile-14425/bla.png
Als Erstes, um den Sprite anzuzeigen, redet mit dem Glatzkopf. Danach könnt ihr mit den anderen Figuren reden, die jeweils eine andere Aktion des Sprites in die Wege leiten.
Get it! (http://share.cherrytree.at/showfile-14426/rpgss_sprite_dem.7z)
Das ist natürlich noch nicht die finale Version des Skripts (ich habe noch einige Ideen, die ich im Laufe der Zeit einbauen werde), aber für den Anfang lässt sich damit arbeiten.
Bei Fragen, Anregungen/Ideen und Bugs, einfach melden.
Have fun!
goldenroy
12.05.2014, 21:41
Holy fucking shit kyuu, du hast einfach mal was rausgehauen, wovon die Leute die längste Zeit dachten, dass es nie möglich wäre. '-'
Ich bin schwer beeindruckt. q_q
The power of DynRPG + RPGSS + Love Lua, thanks! ^_^
IndependentArt
16.05.2014, 09:10
ich hab mich jetzt mal über den installationsvorgang gemacht und festgestellt:
rpgss benötigt laut programmers guide dyn rpg version 0.20.
es gibt aber bisher nur version 0.14a ^^
zumindest hier: http://cherrytree.at/cms/download/?did=20
what to do? ^^
http://share.cherrytree.at/showfile-12494/dynrpg.rar
Wird demnächst mal offiziell aktualisiert
Oh, ganz vergessen im Startpost auf Dyn 0.20 zu verlinken, danke. Die Veröffentlichung der Testversion (http://www.multimediaxis.de/threads/134256-DynRPG-Das-RM2k3-Plugin-SDK?p=3137414&viewfull=1#post3137414) hat natürlich nicht jeder mitbekommen und inzwischen ist der Post auch untergegangen.
IndependentArt
18.05.2014, 19:41
Ich bin nicht sicher, ob das mit der neusten version von dynrpg oder mit rpgss zusammenhängt.
jedenfalls startet meine rpg_rt.exe nicht mehr, seit ich diese dinge implementiert habe. irgenwelche ideen?
also es kommt die windows fehlermeldung "blabla hat ein problem festgestellt und muss beendet werden".
Funktioniert die Demo von hier (http://www.multimediaxis.de/threads/140584-DynRPG-RPGSS?p=3171480&viewfull=1#post3171480) bei dir? Wenn ja, dann ist bei dir irgendwas während der Installation von DynRPG schiefgegangen. In dem Fall:
Hast du den Installationsvorgang von DynRPG korrekt ausgeführt?
Hast du die korrekte RPG Maker Runtime gepatcht? DynRPG funktioniert AFAIR nur mit RPG Maker 2003 v1.08.
Hast du eine ungepatchte RPG_RT.exe gepatcht? Um sicherzugehen, solltest du immer eine frische (d.h. ungepatchte) RPG_RT.exe mit dem DynRPG-Patcher patchen.
IndependentArt
18.05.2014, 21:11
vorher hat es ja funktioniert. und die maker version hab ich natürlich nicht verändert.
aber ich hab selbstverständlich über die schon gepatchtet rpg_rt drüber gepatcht :D
mal sehn, wie ich das nun, mach, ich kann ja vermutlich die exe einfach durch eine andere ersetzen, aber dann muss ich das icon wieder tauschen und bla.
vorher hat es ja funktioniert. und die maker version hab ich natürlich nicht verändert.
Okay, irgendwie hab' ich's bis jetzt nicht mitbekommen, dass du bereits DynRPG verwendet hast, dich also mit den Voraussetzungen und dem Installationsvorgang auskennen solltest.
aber ich hab selbstverständlich über die schon gepatchtet rpg_rt drüber gepatcht :D
Cherry hat zwar hier (http://www.multimediaxis.de/threads/134256-DynRPG-Das-RM2k3-Plugin-SDK?p=3137854&viewfull=1#post3137854) geschrieben, dass es funktionieren sollte, wenn der Patcher über eine bereits mit (und nur mit) dem DynRPG-Patcher gepatchte RPG_RT patcht (so much "patch"...), aber ich persönlich würde um sicherzugehen immer über eine ungepatchte RPG_RT patchen. Sobald du noch irgendwelche anderen Patches, außer DynRPG drauf hast, geht kein anderer Weg an einer ungepatchten RPG_RT vorbei, weil Überschneidungen nicht auszuschließen sind.
IndependentArt
18.05.2014, 21:51
ich hab die exe ausgetauscht(das icon erneuert) und jetzt geht es. zumindest startet es wieder.
aber 2 neue probleme:
wenn ich das rpgss plugin drin hab kommt der error:
20354
wenn ich ohne das plugin starte, also quasi das erste mal mit dynrpg 0.20, dann startet das spiel ohne titelbildschirm. wird also direkt gestartet.
ich hab die exe ausgetauscht(das icon erneuert) und jetzt geht es. zumindest startet es wieder.
aber 2 neue probleme:
wenn ich das rpgss plugin drin hab kommt der error:
20354
Einfach eine leere Datei namens boot.lua ins Verzeichnis ~/spielverzeichnis/Scripts einfügen. Es macht keinen Sinn das RPGSS-Plugin ohne Lua-Skripte zu verwenden, daher ignoriere ich den Laufzeitfehler, dass boot.lua nicht gefunden werden kann, bisher nicht.
wenn ich ohne das plugin starte, also quasi das erste mal mit dynrpg 0.20, dann startet das spiel ohne titelbildschirm. wird also direkt gestartet.
Das ist eigenartig. Hast du sonst andere Plugins drin? Wenn ja, probier mal komplett ohne Plugins zu starten. Ansonsten lade mal eine reproduzierbare Version hoch.
IndependentArt
18.05.2014, 22:22
Einfach eine leere Datei namens boot.lua ins Verzeichnis
welches format soll diese datei haben ...?
okay, das andere problem hat sich geklärt. ich hatte die rpg_rt von epic fail saga genommen, in der naiven annahme, die sei unbehandelt, aber natürlich wird da der titelbildschirm übersprungen. *hust* sorry. ^^
.lua, also nicht boot.lua.lua, sondern boot.lua. ;)
Du kannst übrigens die RPG_RT aus meiner Sprite-Demo nehmen, die ist hundertprozentig nur mit Dyn 0.20 gepatcht.
IndependentArt
18.05.2014, 22:32
ja, aber wie erstell ich denn eine .lua datei? muss ich mal ganz blöd fragen.
ich hab mich ja mit der "sprache", falls es eine ist, noch überhaupt nicht auseinander gesetzt.
Das ist einfach nur eine Datei, die du mit jedem Texteditor öffnen und bearbeiten kannst. Schritt für Schritt:
http://share.cherrytree.at/showfile-14483/bla1.png
http://share.cherrytree.at/showfile-14484/bla4.png
http://share.cherrytree.at/showfile-14481/bla2.png
http://share.cherrytree.at/showfile-14482/bla3.png
http://share.cherrytree.at/showfile-14485/bla5.png
Quellcodedateien sind in der Regel (mir ist eigentlich keine Programmiersprache bekannt, bei der das nicht der Fall wäre) reine Textdateien mit einer informativen Dateiendung, die einfach nur aussagt, um welche Programmiersprache es sich bei dem Quellcode handelt (.lua sagt also nur aus: "Hier handelt es sich um Lua-Quellcode", die Datei ist aber weiterhin nur eine reine Textdatei, die du mit einem beliebigen Texteditor bearbeiten kannst). Nichts also, wofür man besondere Programme/Editoren bräuchte.
Du musst dich übrigens nicht mit Lua (ja, Lua ist eine echte Programmiersprache) auseinandersetzen, wenn du nicht vor hast eigene Skripte zu schreiben, oder vorhandene Skripte zu bearbeiten. Um die Sprite-Bibliothek nutzen zu können, reicht es, wenn du weißt, wie man DynRPG-Plugin-Befehle nutzt.
Solltest du aber mal Lust bekommen Lua zu lernen (Lua ist übrigens eine der einfachsten Programmiersprachen), hier ein paar Anlaufstellen:
Programmieren in Lua (http://www.lua.org/pil/contents.html) (englischsprachig, frei verfügbare ältere Ausgabe des offiziellen Buchs zu Lua)
LUA: für Anfänger (http://lua.gts-stolberg.de/) (deutschsprachig, auf die Schnelle gefunden, scheint aber ganz OK zu sein)
IndependentArt
20.05.2014, 14:07
hab es soweit erstmal zum laufen bekommen, danke. :) Mit den skripten befasse ich mich die tage noch.
IndependentArt
29.05.2014, 20:16
nehme mir grad mal wieder zeit dafür ^^ bin an einer stelle unsicher: du schreibst, der code
require "std.world"
require "std.spritelib"
function onTitleScreen()
world = World.new()
end
function onLoadGame(id, data)
world:loadState(data)
end
function onSaveGame(id)
return world:saveState()
end
function onSceneDrawn(scene)
world:update()
world:render()
end
... soll in die datei boot.lua
soweit so gut.
darunter sprichst du dann jedoch von der datei "Scripts/std/spritelib.lua"
ich hab weder den unterordner std angelegt noch wurde bisher die datei spritelib erwähnt. oder hab ich was verpasst? ^^
nehme mir grad mal wieder zeit dafür ^^ bin an einer stelle unsicher: du schreibst, der code
... soll in die datei boot.lua
soweit so gut.
darunter sprichst du dann jedoch von der datei "Scripts/std/spritelib.lua"
ich hab weder den unterordner std angelegt noch wurde bisher die datei spritelib erwähnt. oder hab ich was verpasst? ^^
Wenn du den Ordner assets/Scripts, wie im How To beschrieben, aus dem Release-Paket in dein Spielverzeichnis kopiert hast, müsste diese Datei eigentlich unter ~/spielverzeichnis/Scripts/std/ zu finden sein.
Aber vergiss die mit dem Release ausgelieferten Skripte und lade dir stattdessen die aktualisierten Skripte aus dem Repository (https://github.com/kyuu/dynrpg-rpgss/tree/master/assets) runter. In der Zwischenzeit habe ich einige Sachen verbessert/umstrukturiert, die Sprite-Bibliothek um neue Befehle erweitert und eine generische boot.lua hinzugefügt, so dass du diese nicht mehr selbst erstellen musst.
Lösche den kompletten Ordner Scripts in deinem Spielverzeichnis.
Auf der RPGSS-Hauptseite (https://github.com/kyuu/dynrpg-rpgss) klicke auf den Button "Download ZIP" (unten rechts).
Extrahiere aus dem heruntergeladenen Archiv den kompletten Ordner Scripts in dein Spielverzeichnis.
Ich habe die Funktionen aus spritelib.lua umbenannt, d.h. die Referenz aus diesem (http://www.multimediaxis.de/threads/140584-DynRPG-RPGSS?p=3171480&viewfull=1#post3171480) Post stimmt nicht mehr. spritelib.lua ist nun dukumentiert, sodass du stattdessen diese direkt als Referenz hernehmen kannst.
Hier (http://share.cherrytree.at/showfile-14646/rpgss_sprite_dem.7z) ist auch eine überarbeitete Sprite-Demo. Schau dir einfach die Events im Maker an, um besser zu verstehen, wie die Funktionen, die in spritelib.lua definiert sind, aus dem Event Code aufgerufen werden können.
Neuer Release
rpgss-0.7.0.7z (http://share.cherrytree.at/showfile-14800/rpgss_07.7z)
Changes between 0.7.0 and 0.6.0
-------------------------------
* Refactored scripts.
* Added generic boot.lua.
* Switched to Azura image I/O library.
* Added option to write palletized images.
Skripte wurden überarbeitet, es gibt nun eine generische boot.lua und man kann nun Bilder in 8-Bit speichern, die der RPG Maker lesen kann.
goldenroy
08.06.2014, 22:10
und man kann nun Bilder in 8-Bit speichern, die der RPG Maker lesen kann.
Yesssss! Gibts ein Beispiel dafür, wie man die in 8-Bit speichert?
EDIT: Ah, nevermind, schon gefunden. palletize P:
EDIT EDIT: Wäre es möglich eine Funktion einzubauen, um festzulegen, welche Farbe transparent wird? So gesehen wählt er einfach eine Farbe willkürlich aus, und das ist doof. :C
EDIT EDIT: Wäre es möglich eine Funktion einzubauen, um festzulegen, welche Farbe transparent wird? So gesehen wählt er einfach eine Farbe willkürlich aus, und das ist doof. :C
Die Information, welche Farbe transparent ist, wird leider nicht im Dateiformat gespeichert, sondern wird erst im Resource Manager des Makers festgelegt. D.h. hast du im Maker festgelegt, dass beispielsweise die dritte Farbe der Palette transparent ist, lässt sich diese Information nicht in der Datei selbst bearbeiten. Beim Quantisieren (also Reduzieren der Farben auf 256) kann es außerdem dazu kommen, dass Farben vermischt werden, d.h., auch wenn man direkt eine transparenten Farbe, z.B. #FF00FF, angeben könnte, könnte diese nach dem Quantisierungsprozess nicht mehr vorhanden sein, weil sie mit einer anderen vermischt und z.B. zu #FF10FF wurde. ;(
Wofür genau brauchst du das denn? Eventuell lässt sich ja eine Lösung finden, ich möchte aber nichts versprechen.
Die Transparenzfarbe ist nicht willkürlich und die wird auch nicht ausserhalb der Datei irgendwo gespeichert. Es ist der erste Platz in der Farbpalette. Beim Import im Maker wird die geklickte Transparenzfarbe auf Palettenplatz 0 umbelegt.
Doch, die transparente Farbe wird in der jeweiligen Datei gespeichert. Transparent ist immer der Farbeintrag an Palettenindex 0. Beim Importieren tauscht der Maker lediglich die Einträge entsprechend aus.
Ein paar Bilder zur Verdeutlichung:
Testbild und dazugehörige Palette:
http://i3.minus.com/iHzLqbGK1jlYF.png
http://i7.minus.com/ibi90VNvpdY2Sg.png
Beim Importieren habe ich dann das Gelb oben rechts als Transparenzfarbe gesetzt und der Maker hat die Palette ensprechend umgeändert (und auf 256 Einträge erweitert):
http://i1.minus.com/iJd7kAcTWnxT0.png
http://i3.minus.com/i2ydUmZVGb60c.png
Edit: Verdammt Corti, nachdem ich so viele schöne Bilder gemacht habe D:
Stimmt, in der DynRPG-Referenz zu Image::useMaskColor steht auch etwas, woraus man das ableiten kann:
If true, color 0 will be used as transparent color.
Danke! Jetzt muss ich mir nur überlegen (bzw. testen), wie man sinnvoll eine Farbe übergeben kann, da das Problem, dass die Farben nach dem Quantisieren möglicherweise nicht mehr die gleichen sein könnten, immernoch besteht. :/
Zum Beispiel zuerst eine Maske anlegen die besagt wo überall diese Farbe vorkommt, dann auf 255 Farben quantisieren, dann die 256. Farbe (#0) explizit für die Transparenz nutzen (anhand der Maske die Pixel auf die #0 Farbe setzen und ihr als Paletteneintrag den originalen Farbcode geben).
Vielleicht geht das aber auch einfacher, hängt von deiner Library ab...
Gute Idee, danke! Wobei extra eine Maske anlegen nicht nötig ist, da das Ursprungsbild bereits die notwendigen Informationen hat, d.h. einfach das Ursprungsbild durchlaufen und im quantisierten Bild überall dort die Pixel auf Index 0 setzen, wo im Ursprungsbild die Transparenzfarbe vorkommt. Das einzige Problem dabei ist, dass ich auf 255 Farben statt auf 256 reduzieren müsste und das ist in der momentanen Schnittstelle meiner Image-Bibliothek nicht vorgesehen, um die Komplexität gering zu halten. Der Quantisierungsprozess selbst würde auch mit einem Farbenlimit != 256 funktionieren. In meiner momentanen Lösung gehe ich einfach die resultierende Palette durch und wenn ich auf die Transparenzfarbe stoße (und diese sich nicht bereits auf Index 0 befindet) schiebe ich diese (mit allen dazugehörenden Änderungen im Pixelbuffer) auf Index 0. Das funktioniert auch recht gut soweit ich das getestet habe, vermutlich aber auch nur solange die Transparenzfarbe sich deutlich von den anderen Farben unterscheidet, d.h. der Abstand im Farbraum zu den anderen Farben groß genug ist (in dem Fall wird die Farbe nämlich als ein eigener Cluster angesehen und nicht mit anderen Farben vermischt). Ich behalte mal deine Idee im Hinterkopf. Danke nochmal.
bugmenot
11.06.2014, 18:52
Kurze Frage:
Was zwingt dich, die Farbpalette für einzelne Bilddateien bei 8bit zu belassen? Angesichts der Tatsache, dass der Buffer des 2k(3) nativ insgesamt 15bit Farbtiefe zulässt und DynRPGSS ja scheinbar mit eigenen Buffern und anderem Grafik-Gedings arbeitet.
Edit:
Meinte das eher bezogen auf die Transparenzvergabe. Meine Frage hat sich damit eh erledigt.
Das ist nur ein kleines Feature für die, die es brauchen (also RPGSS-Images als 8-Bit-Bilder speichern zu können, die sonst immer als 24-Bit-Bilder plus Alphakanal gespeichert werden). Nützlich z.B. wenn man im Maker importierte Grafiken wie etwa Hintergrundbilder manipulieren will. In dem Fall muss nämlich das ersetzende Bild in 8-Bit sein, sonst kann der Maker die Datei nicht laden. ;)
IndependentArt
16.06.2014, 16:38
ich unternehme grad versuche, mir ein bild mit alpha kanal anzeigen zu lassen. ich bin nicht sicher, was ich falsch mache, aber so recht will es noch nicht klappen.
anzeige im maker:
20559
ausgangsbild:
20560
irgendwie scheint die transparenz falsch interpretiert zu werden. wobei ich mich auch gefragt hab, warum es keine "normale" anzeige funktion gibt, sondern nur subtract, add etc., kann auch daran liegen. ist das nicht vorgesehen?
noch eine frage: womöglich hab ich das überlesen, aber kann ich pictures auch wie bei dynPEC mit variablen ansteuern? bzw. kann ich alle werte bei der picture anzeige auch mit variablen ersetzen?
irgendwie scheint die transparenz falsch interpretiert zu werden. wobei ich mich auch gefragt hab, warum es keine "normale" anzeige funktion gibt, sondern nur subtract, add etc., kann auch daran liegen. ist das nicht vorgesehen?
Für Alpha-Kanal-Blending verwende den "mix" blend mode. ;)
Fall du bereits "mix" verwendest (laut Resultat scheint es aber eher "subtract" gewesen zu sein), poste mal deinen Code.
Wenn du nähere Erläuterungen zu den einzelnen Blend Modes brauchst, gib einfach Bescheid!
noch eine frage: womöglich hab ich das überlesen, aber kann ich pictures auch wie bei dynPEC mit variablen ansteuern?
Du meinst statt über eine Zeichenkette (Name), über eine numerische ID? Noch nicht, aber ich baue es für dich ein.
bzw. kann ich alle werte bei der picture anzeige auch mit variablen ersetzen?
Klar, das sollte bei allen Werten bereits möglich sein, die keine Zeichenketten sind, also Position, Z, Skalierung, Rotation, Quellrechteck, etc.
Wenn du mehr Fragen hast, stell sie ruhig, ich werde sie dir gerne beantworten. :)
IndependentArt
17.06.2014, 11:04
hab das mit der anzeige erstmal soweit hinbekommen.
Du meinst statt über eine Zeichenkette (Name), über eine numerische ID?
Ähm, nummern wären vielleicht auch nicht verkehrt, wenn bisher nur buchstaben möglich sind.
aber eigentlich meinte, ich, ob man bestimmen kann, welches picture aufgerufen wird auf der basis von einer variable. ehrlich gesagt, weiß ich selbst nicht mal genau was ich damit meine, aber bei dynPEC hab ich halt die anzeigen meiner gegner im kampf so in der art gemacht, wobei man nochmal differenzieren muss, weil es da eben über diese spritesheets ging, wo ich dann eben die spalte des sheets mit der variable angezeigt hab. ... so wichtig ist das auch nicht, vielleicht. ich seh bei diesen "Pointer"-geschichten, so nennt man das glaub ich, noch nich so recht durch.
wie geb ich denn bei den anderen werten die variable an? diese form: "var0000"?
Ähm, nummern wären vielleicht auch nicht verkehrt, wenn bisher nur buchstaben möglich sind.
Im Grunde sollte man bereits jetzt (durch zu optimistisches Programmieren von mir) numerische IDs verwenden können, es wird aber spätestens beim Speichern zu einer Fehlermeldung kommen, da von Zeichenketten als Bezeichner ausgegangen wird. Das wird sich auch in Zukunft nicht ändern um das Skript nicht zu kompliziert zu machen, nur werde ich die Schnittstelle (also die "Befehle", die du per Event-Kommentar verwendest) so überarbeiten, dass numerische IDs im Hintergrund zu Zeichenketten konvertiert werden.
aber eigentlich meinte, ich, ob man bestimmen kann, welches picture aufgerufen wird auf der basis von einer variable. ehrlich gesagt, weiß ich selbst nicht mal genau was ich damit meine, aber bei dynPEC hab ich halt die anzeigen meiner gegner im kampf so in der art gemacht, wobei man nochmal differenzieren muss, weil es da eben über diese spritesheets ging, wo ich dann eben die spalte des sheets mit der variable angezeigt hab. ... so wichtig ist das auch nicht, vielleicht. ich seh bei diesen "Pointer"-geschichten, so nennt man das glaub ich, noch nich so recht durch.
Beim Lesen dachte ich erst, du meinst sowas wie "MeinBild" + V123 + ".png", also dass der Dateiname dynamisch zusammengebaut wird, aber nachdem ich mir DynPEC genauer angesehen habe, verstehe ich was du meinst. Im Prinzip ist das bereits möglich (durch Angabe des Quellrechtecks, siehe set_sprite_source_rect), wenn auch etwas umständlicher. Ich werde das aber noch weiter vereinfachen, so dass man ein Quellrechteck auch anhand einer ID auswählen kann.
Wenn du möchtest, können wir uns mal im IRC oder so treffen und ich erkläre dir alles, was du wissen möchtest, bzw. wo du noch Unklarheiten hast im Detail. Melde dich einfach mal, wenn du Lust hast.
wie geb ich denn bei den anderen werten die variable an? diese form: "var0000"?
Genau so wie auch bei allen anderen DynRPG-Plugins: V<ID> (ohne "<" und ">") Also z.B.:
@call add_sprite, "bla", "Picture/bla.png", "mix", V1, V2, V3, V4, V5, V6
Das holt sich die Werte für die Parameter visible, z, x, y, scale und angle entsprechend aus den Variablen #1, #2, #3, #4, #5 und #6. Variablen-Lookup (so nennt man das) funktioniert auch mit beliebiger Verschachtelungstiefe, also VV1, oder VVVVV1 würde auch funktionieren (wobei das nicht bedeutet "hole Wert aus Variable #1, sondern "solange Anzahl Vs > 1: hole Wert als Variable-ID und wiederhole Lookup, sonst: hole Wert"), ist aber wahrscheinlich ab einer Verschachtelungstiefe > 2 nicht mehr praktikabel.
Wollte die nächste Version eigentlich schon vor einer Woche oder so veröffentlichen, habe mich dann aber entschieden die ganzen Änderungen, die ich schon lange vor mir herschiebe, endlich hinzuzufügen. Und hier ist das Ergebnis:
Neuer Release
rpgss-0.8.0.7z (http://share.cherrytree.at/showfile-15322/rpgss_08.7z)
Changes between 0.8.0 and 0.7.0
-------------------------------
* Added onSystemBackgroundDrawn callback.
* Added keyboard.getVirtualKeyCode.
* Added keyboard.getState.
* Added mouse.getState.
* Mouse position is now clipped to screen dimensions.
* Added Sound.pitch.
* Renamed Sound.repeat to Sound.loop to avoid collision with Lua's
"repeat" keyword.
* Added graphics.newSystemFontImage.
* Added option to graphics.writeImage to force a particular color as
the first palette entry in palletized images.
* Added game.frameRate.
* Added game.millisPerFrame.
* Added game.frameCounter.
* Added game.playTime.
* Added game.system.graphicFilename.
* Added game.menu.scene.
* Added game.menu.allowed.
* Added game.menu.saveAllowed.
* Added game.menu.teleportAllowed.
* Added game.menu.escapeAllowed.
* Added game.battle.layout.
* Added game.battle.atbMode.
* Added game.battle.speed.
* Added game.map.existsEvent.
* Added game.map.findEvent (replaces game.map.findEventById and
game.map.findEventByName).
* game.map.moveCamera now behaves as expected (positive offsets move toward
positive infinity, negative offsets move toward negative infinity).
* Renamed control mode and layer constants for brevity.
* Added Character:move.
* Renamed game.music.fadeOut to game.music.fade for consistency.
* Added a temporary workaround in game.screen.drawq that fixes the issue
that the TexturedQuad primitive ignores the source rect position.
* Moved screen drawing code into its own module for reasons of clarity
and improved maintainability.
* Anything rendered to the screen is now affected by the screen brightness
to avoid sticking out during transitions.
* Added bitmap versions of the system fonts msmincho and msgothic, as well
as initial versions of the system window skins.
* The # (length) operation now works on proxies returned by properties
like game.party, game.map.events, game.battle.enemies, etc.
* Refactored and restructured existing system scripts for improved
modularity and maintainability.
* Added class.lua (allows for solid object-oriented programming in Lua;
powered by Yonaba's 30log library).
* Added Cache.lua (allows caching of frequently used resources like images,
fonts and window skins).
* Added Timer.lua (keeps track of and provides an interface to query the
frame/time delta between updates).
* Added CallbackManager.lua (allows writing encapsulated extensions).
* Added InputManager.lua (allows listening/reacting to input events).
* Added AudioManager.lua (allows playback of BGM, BGS, ME and SE).
* Added GameClock.lua (keeps track of the total play time and optionally
displays it in the main menu).
* Added PathFinder.lua (adds powerful and feature-rich pathfinding tools;
powered by Yonaba's Jumper library).
Ein großer Schritt Richtung Version 1.0 und Richtung solides Framework!
Skripte wurden erheblich überarbeitet und viele neue hinzugefügt. Mit dem Callback Manager kann man nun isolierte Erweiterungen schreiben, die wie das Plugin-System von DynRPG Plug & Play erlauben. Ein gutes Beispiel dazu ist die Game Clock-Erweiterung.
Mit dem Hinzufügen von Character:move ist nun auch Pathfinding möglich! Dazu habe ich für euch eine Demo vorbereitet:
http://share.cherrytree.at/showfile-15323/bla.png
Download (alte Version, siehe weiter unten für die aktuelle) (http://share.cherrytree.at/showfile-15324/rpgss_demo_pathfindin.7z)
Edit:
Ich habe das Pathfinder-Skript erweitert, so dass nun, sollte kein Pfad zur Zielposition existieren, ein Pfad zur nächstbesten Position zurückgegeben werden kann. Dazu einfach beim Aufruf von move_character (siehe Scripts/extensions/pathfinder/interface.lua) für den Parameter allownearest eine 1 übergeben.
Hier ist die aktualisierte Pathfinding-Demo: Download (http://share.cherrytree.at/showfile-15378/rpgss_demo_pathfindin.7z)
Ihr könnt entweder einfach die aktualisierten Pathfinder-Skripte aus dieser Demo verwenden, oder aus dem Repository (https://github.com/kyuu/dynrpg-rpgss/tree/master/assets/Scripts) (immer auf dem neuesten Stand) herunterladen.
Ich habe für jemanden ein Skript zum automatisierten Anzeigen von Lightmaps geschrieben. Ich denke, das können auch andere brauchen:
http://share.cherrytree.at/showfile-15394/bla.png
Download (http://share.cherrytree.at/showfile-15395/rpgss_demo_lightma.7z)
Installation
RPGSS 0.8 installieren (inklusive Assets).
In der Datei Scripts/boot.lua sicherstellen, dass entweder eine Zeile mit require "extensions", oder eine Zeile mit require "extensions.lightmapmanager" als Inhalt existiert. Einfach mit einem beliebigen Text-Editor öffnen/bearbeiten.
Alles aus LightmapDemo/Scripts/extensions/lightmapmanager in das selbe Verzeichnis deines Projekts kopieren.
Verwendung
Falls über eine Map eine Lightmap gelegt werden soll: Lightmap in "mapXXXX.png" umbenennen, wobei für XXXX die Map-ID einsetzen, inklusive führender Nullen, und ins Verzeichnis Picture/lightmaps kopieren.
IndependentArt
03.07.2014, 12:43
probiere es grad aus, hatte allerdings noch keinen erfolg.
ich hab also meine lightmap im ordner lightmaps. sie heißt "map0066.png" und ist für die map 66.
ich hab die sachen aus dem demoprojekt kopiert. wie finde ich den fehler? ^^
Guck mal in boot.lua ob da require "extensions" steht. Wenn nicht (ich gehe stark davon aus), dann einfach irgendwo oben require "extensions" hinzufügen.
Wenn man nicht alle, sondern nur bestimmte Extensions haben will, einfach die Zeile require "extensions.name" für jede Extension einfügen. Also zum Beispiel:
require "extensions.lightmapmanager"
require "extensions.gameclock"
Um die Extensions Lightmap Manager und Game Clock hinzuzufügen.
Manche Extensions benötigen andere Extensions, in dem Fall muss aber nichts weiter getan werden, denn diese werden automatisch hinzugefügt (vorausgesetzt der Extension-Autor hat alles richtig gemacht ^^).
IndependentArt
03.07.2014, 13:12
20631
o_O
Ich sollte mal meine Installationshinweise in der Dokumentation überarbeiten und die Assets-Installation zur Pflicht machen. :> Einfach den Ordner Fonts und am besten auch gleich den Ordner WindowSkins (zu finden im Ordner assets im 0.8-Release) in dein Spielverzeichnis kopieren.
Manche Extensions zeichnen Text/Fenster und benötigen entsprechend die mitgelieferten Standardfonts/-windowskins.
Übrigens: Die Scene Manager Extension kann die aktuellen FPS am Bildschirm ausgeben. Dazu einfach F10 drücken. Nur so am Rande...
goldenroy
03.07.2014, 14:03
Solche nützlichen Skripte wie das Pathfinding und der LE-Manager sind wirklich das, was RPGSS braucht, bis sich Leute finden, die eigene Skripte schreiben. Sehr toll das Ganze! :A
IndependentArt
03.07.2014, 15:23
20632
will immernoch mehr :D
das ist ja komischerweise die grafik, die ich im system hab. kenne ja die genauen hintergründe nicht.
Damn, lösch' mal den Ordner Scripts/extensions/gameclock (brauchst du eh nicht). xD
Das Problem ist die Zeile 8 in GameClock.lua, das versucht nämlich folgendes:
windowskin = Cache:windowskin("WindowSkins/"..game.system.graphicFilename..".png"),
Da du aber kein System-Windowskin verwendest, gibt's Probleme. Muss ich mal überarbeiten...
IndependentArt
03.07.2014, 16:33
FUCK YEAH!
20633
frag mich, warum das ding hier so wenig beachtung bekommt bisher.
das sind automatisch ins spiel integrierte lightmaps mit ALPHAKANAL!
macht doch mal lärm für Kyuuu leute :D
könnte ich die lightmap eigentlich jetz irgendwie auch ansteuern und ein/ausfaden zB?
könnte ich die lightmap eigentlich jetz irgendwie auch ansteuern und ein/ausfaden zB?
Jetzt schon: Download (http://share.cherrytree.at/showfile-15538/lightmapmanage.7z) :>
Einfach die alten durch die neuen Skripte ersetzen.
Mit
@call change_lightmap_opacity, opacity, duration
kannst du ein/ausfaden. opacity geht von 0 (unsichtbar) bis 255 (komplett sichtbar). duration ist die Zeit in Millisekunden, die das Fading dauern soll.
IndependentArt
04.07.2014, 15:54
hm, wäre es nicht einfacher gewesen, wenn die lightmap einen standart-namen hätte, den man dann mit den normalen spritebefehlen ansteuert?
hm, wäre es nicht einfacher gewesen, wenn die lightmap einen standart-namen hätte, den man dann mit den normalen spritebefehlen ansteuert?
Lightmap ist im Moment nicht als Sprite implementiert, sondern wird direkt als Image gezeichnet. Es ist aber natürlich möglich sie als Sprite zu implementieren. In dem Fall könntest du sie dann als gewöhnlichen Sprite ansteuern, ja. Hm, ich glaube das wäre sogar wünschenswert, weil die Lightmap dann einen Z-Wert hätte und man Sprites sowohl hinter der Lightmap, als auch davor zeichnen könnte (was im Moment nicht möglich ist). Ist es das, warum du fragst?
IndependentArt
06.07.2014, 21:02
ja, durchaus. denke, das wäre am flexibelsten.
goldenroy
13.07.2014, 14:07
<Comment> @call "add_sprite", "test", "Sprites/testbush.png", "mix", 1, 0, 180, 160, 100, 0
<Wait> 0.1 Sec
<Comment> @call "set_sprite_tile", "test", 5, 5
<Erase Event>
Spuckt mir nen Fehler aus:
13-07-2014 15:06:16: at Map0001.lmu:EV0002, page 1, line 3:
13-07-2014 15:06:16: Lua error:
13-07-2014 15:06:16: Scripts/extensions/sprite/Sprite.lua:329: assertion failed!
13-07-2014 15:06:16: stack traceback:
13-07-2014 15:06:16: Scripts/extensions/sprite/Sprite.lua:329: in function 'setTile'
13-07-2014 15:06:16: Scripts/extensions/sprite/interface.lua:167: in function <Scripts/extensions/sprite/interface.lua:164>
(RPGSS 0.8.0.)
Du musst vorher noch die tile dimensions setzen:
@call set_sprite_tile_dimensions, name, tile_w, tile_h
goldenroy
13.07.2014, 14:19
Danke. Mir fällt allerdings grade auf, dass ich set_sprite_tile mit set_sprite_position verwechselt habe. Jetzt funktioniert es wenigstens so wie gedacht. x3
goldenroy
13.07.2014, 15:05
Doppelpost, wee. ._.
Kurze Frage: Gibt es irgendeine Möglichkeit, auf die Namen von Heros, Items oder Skills (halt irgendwas aus der Maker-DB) zuzugreifen? Ich möchte nämlich nen bestimmten String übermitteln und mir fällt grad kein anderer Weg ein, dem Maker irgendeinen Text zu geben. :0
Danke. Mir fällt allerdings grade auf, dass ich set_sprite_tile mit set_sprite_position verwechselt habe. Jetzt funktioniert es wenigstens so wie gedacht. x3
Ach so. :o
Hier trotzdem eine kleine Erklärung zu der Tile-API, weil ich bis jetzt noch nichts dazu geschrieben habe:
Mit Sprites ist es möglich nicht das ganze Bild anzuzeigen, sondern nur einen Teil davon. In der alten API konnte man ein Quellrechteck innerhalb des Bildes angeben, das angezeigt werden soll. Da das aber etwas benutzerunfreundlich war (um das Quellrechteck zu ändern musste man jedes mal die pixel-genauen Position und Abmessungen angeben), habe ich die entsprechenden Funktionen umgebaut. Die neue API sieht das Bild als eine Matrix aus gleichgroßen Sub-Images (Tiles):
http://share.cherrytree.at/showfile-15734/bitmap.png
Dabei gibt es mindestens ein Tile (das Tile hat die gleichen Abmessungen wie das Bild) und maximal Image Width * Image Height Tiles (jedes Tile ist genau ein Pixel groß).
Beim Erzeugen eines Sprites mit add_sprite werden die Tile-Abmessungen mit (Image Width, Image Height) und die Tile-Koordinaten mit (0, 0) initialisiert. Danach kann man mit set_sprite_tile_dimensions die Tile-Abmessungen (width, height) und mit set_sprite_tile die Tile-Koordinaten (x, y) setzen.
Beim Setzen der Tile-Abmessungen ist zu beachten, dass die Abmessungen die folgenden Bedingungen erfüllen müssen:
Image-Breite / Tile-Breite = N, Rest 0
Image-Höhe / Tile-Höhe = M, Rest 0
Wenn das Bild mit set_sprite_image geändert wird, werden automatisch auch die Tile-Koordinaten und die Tile-Abmessungen zurückgesetzt.
Doppelpost, wee. ._.
Kurze Frage: Gibt es irgendeine Möglichkeit, auf die Namen von Heros, Items oder Skills (halt irgendwas aus der Maker-DB) zuzugreifen? Ich möchte nämlich nen bestimmten String übermitteln und mir fällt grad kein anderer Weg ein, dem Maker irgendeinen Text zu geben. :0
Auf die Namen der Heros kannst du über game.actors[id].name zugreifen (für Party-Member: game.party[id].name). Für Item- und Skill-Namen bietet DynRPG zwar entsprechend RPG::getItemName und RPG::getSkillName, aber ich habe diese Funktionen bis jetzt noch nicht in Lua offengelegt, weil ich diese Funktionen noch nicht wirklich einordnen konnte. :/ Ich bin kurz davor eine neue Version zu releasen und könnte es da einbauen, wenn du es unbedingt brauchst.
Wie und an was (also in welche Richtung) willst du eigentlich den String übermitteln? Nur aus Interesse.
goldenroy
13.07.2014, 17:49
Auf die Namen der Heros kannst du über game.actors[id].name zugreifen (für Party-Member: game.party[id].name). Für Item- und Skill-Namen bietet DynRPG zwar entsprechend RPG::getItemName und RPG::getSkillName, aber ich habe diese Funktionen bis jetzt noch nicht in Lua offengelegt, weil ich diese Funktionen noch nicht wirklich einordnen konnte. :/ Ich bin kurz davor eine neue Version zu releasen und könnte es da einbauen, wenn du es unbedingt brauchst.
Wie und an was (also in welche Richtung) willst du eigentlich den String übermitteln? Nur aus Interesse.
Ich bastel grad an was, und wollte versuchen hinzukriegen, ein Item vom Boden aufzuheben. Beim Aufheben will ich den Namen des Objekts übermitteln und in nem Hero abspeichern, damit man in einer Messagebox einfach mit einem \n[X] darauf zugreifen kann.
Leider funktioniert das grade nicht so ganz. Kann ich game.actors nicht verändern? Weil game.actors[2].name = "Test" spuckt bei mir no member named 'name' aus. :0
game.actors (also das Actors-Array selbst) kannst du nicht ändern, nein. Aber Actor.name auf einen neuen String setzen kann ich einbauen (laut DynRPG-API). ^^
goldenroy
13.07.2014, 18:27
game.actors (also das Actors-Array selbst) kannst du nicht ändern, nein. Aber Actor.name setzen kann ich einbauen. ^^ DynRPG sollte da eigentlich mitspielen, laut der API.
Das wäre super. Die Actornames haben ja ne Zeichenbegrenzung (12 Zeichen?). Würde das da Probleme geben, oder gibts die nur, wenn der Actor auch wirklich im Spiel ist? Das schlimmste was ich mir als Konsequenz vorstellen kann, ist ein abgeschnittener Name.
Kein Plan. Ich teste es mal und wenn es keine Probleme macht, mache ich's in die nächste Version rein.
Edit:
http://share.cherrytree.at/showfile-15741/bitmap.png
http://share.cherrytree.at/showfile-15742/bitmap.png
Aber kein Crash (soweit ich getestet habe)!
Habe mich übrigens vorhin vertan: name ist nicht das Attribut der Actor-Klasse, sondern das der Battler-Klasse. Die Klasse Monster erbt zwar ebenfalls von Battler, DynRPG bietet aber im Moment keine Möglichkeit, den Namen eines Monsters zu ändern und damit auch RPGSS.
Ich bastel grad an was, und wollte versuchen hinzukriegen, ein Item vom Boden aufzuheben. Beim Aufheben will ich den Namen des Objekts übermitteln und in nem Hero abspeichern, damit man in einer Messagebox einfach mit einem \n[X] darauf zugreifen kann.
Leider funktioniert das grade nicht so ganz. Kann ich game.actors nicht verändern? Weil game.actors[2].name = "Test" spuckt bei mir no member named 'name' aus. :0
Wie wäre es hiermit? (http://www.multimediaxis.de/threads/138637-DynRPG-Plugin-RM2k3-MessageExtender-BETA?highlight=MessageExtender)
Ist eigentlich genau das, was du suchst, denke ich. Und das ohne kompliziert extra in einen Hero-Namen zu speichern.
PeAcE
MorDen
goldenroy
14.07.2014, 11:10
Wie wäre es hiermit? (http://www.multimediaxis.de/threads/138637-DynRPG-Plugin-RM2k3-MessageExtender-BETA?highlight=MessageExtender)
Ist eigentlich genau das, was du suchst, denke ich. Und das ohne kompliziert extra in einen Hero-Namen zu speichern.
PeAcE
MorDen
Sicher, aber dafür muss ich ja auch Zugriff auf entweder Itemname/-beschreibung, Skillname/-beschreibung oder den Heldenrang haben um die anzupassen. Mit dem Eventnamen könnte es vielleicht gehen, aber dann muss ich jedes Event einzeln benennen. °-o
Könntest du nicht einfach die ID des Items in eine Variable schreiben und dann im Text "\i[\v[]]" machen?
Ansonsten scheine ich das Problem gerade nicht zu verstehen bzw. weiß ich nicht genau, was du vorhast :O ^^"
PeAcE
MorDen
goldenroy
14.07.2014, 12:19
Könntest du nicht einfach die ID des Items in eine Variable schreiben und dann im Text "\i[\v[]]" machen?
Ansonsten scheine ich das Problem gerade nicht zu verstehen bzw. weiß ich nicht genau, was du vorhast :O ^^"
PeAcE
MorDen
..Stimmt. Das wird wohl funktionieren, danke. °J°
Trotzdem könnte kyuu das mit dem Heldennamen ja in die neue Version packen, wenn es nicht allzu kompliziert einzubauen ist. °-o
..Stimmt. Das wird wohl funktionieren, danke. °J°
Trotzdem könnte kyuu das mit dem Heldennamen ja in die neue Version packen, wenn es nicht allzu kompliziert einzubauen ist. °-o
Kein Problem.^^ Manchmal denkt man einfach komplizierter, als es sein muss xD.
Klar sollte das noch mit rein - und ich denke nicht, dass der liebe Kyuu damit wirklich Probleme hätte^^
PeAcE
MorDen
und ich denke nicht, dass der liebe Kyuu damit wirklich Probleme hätte^^
Danke für das Vertrauen. :>
Neuer Release
rpgss-0.9.0.7z (http://share.cherrytree.at/showfile-15773/rpgss_09.7z)
Changes between 0.9.0 and 0.8.1
-------------------------------
* Optimized screen blending.
* Added setter for Battler.name.
* Shortened blend mode constants.
* Added rpg.get[Item,Skill]Name.
* Added rpg.get[Item,Skill]Description.
Changes between 0.8.1 and 0.8.0
-------------------------------
* Image:drawText now uses the 'set' blend mode.
Screen Blending wurde nun komplett in Assembler geschrieben. Leider lässt sich Screen Blending nicht mit SIMD optimieren, weil die Screen Buffer-Pixel im RGB565-Format sind und damit ungeeignet für SIMD (das Entpacken und Verpacken ist zu teuer). Dennoch ist Screen Blending in RPGSS äußerst schnell und mit der Implementierung in Assembler konnte ich größtenteils Verbesserungen von 50-100% erzielen.
Kleiner Tipp an dieser Stelle: Wer viele und große Images jeden Frame zeichnet, kann bessere Performance erzielen, indem er die Images zuerst auf ein Image-Buffer und den Buffer dann auf den Screen zeichnet. Image-Blending ist in der Regel SIMD-optimiert und damit viel schneller als Screen-Blending.
http://share.cherrytree.at/showfile-15805/bla.png
Partikel + Blend Modes = Awesome
Echt genial! Die Zeichenmethoden von RPGSS sind echt hammer! :A
Wird langsam echt mal Zeit für's offizielle DynRPG v0.2 ^^
Wie sieht's mit der Performance aus, Kyuu?
PeAcE
MorDen
IndependentArt
16.07.2014, 14:10
gibts das auch bewegt? ^^
gibts das auch bewegt? ^^
Ich denke es ist bewegt. Immerhin sprach Kyuu von "Partikeln" :D
PeAcE
MorDen
Echt genial! Die Zeichenmethoden von RPGSS sind echt hammer! :A
Freut mich, dass jemand sie nützlich findet. :>
Wie sieht's mit der Performance aus, Kyuu?
Wovon genau?
Die Performance der Grafikroutinen? Echt schwer zu sagen, da die Performance von so vielen Faktoren abhängt (Prozessor, Blend Mode, Algorithmus, Anzahl der gezeichneten Pixel, etc.).
Bei der Partikel-Demo unten schaffe ich beispielsweise 350 Partikel gleichzeitig auf einem Pentium 4 (3,4 GHz) bei 60 FPS. Auf einem Core i3 (3,3 GHz) schaffe ich mehr als das Fünffache (wobei die Anzahl der gezeichneten Pixel pro Frame bereits bei 350 Partikeln in Millionenhöhe liegt!).
Wenn es dich interessiert, könnte ich ein paar Benchmarks veröffentlichen (wenn ich mal Zeit habe). Oder du machst deine eigenen Benchmarks. ;>
gibts das auch bewegt? ^^
Download (http://share.cherrytree.at/showfile-15811/particleeffectdem.7z)
IndependentArt
16.07.2014, 16:43
kranker scheiß :D
really looking forward to whatever this is.
goldenroy
31.07.2014, 14:44
Hey. Ich hab ne Frage.
Folgende Map hat eine Lightmap.
http://i.imgur.com/FOsY56a.png
Diese benutzt verschiedene Photoshop-Blendmodes (Color Dodge, Overlay, Multiplizieren etc. etc.).
Da sich diese ja nicht einfach so in den Maker übertragen lassen (zumindest nicht ohne Parallax), dachte ich, ich verzichte auf ein paar schönere Effekte und komprimier das ganze auf einen Effekt.
http://i.imgur.com/IljXMn4.png
Den LE-Manager kann ich ja aufgrund fehlender Unterstützung für BlendModes eh momentan streichen, deshalb habe ich mit den verfügbaren Blend Modes in spritelib rumgespielt.
http://i.imgur.com/gRil2JR.png
(Mix, 100 Opacity)
http://i.imgur.com/VxbnhgP.png
(Multiplizieren)
Wie man sieht, sind die Ergebnisse nicht wirklich ansehlich. Ist da irgendwas in die Richtung geplant? :0
Das erste Bild ist aus Photoshop (wobei es mehrere Layer sind; der unterste ist die Map und alle drüber liegenden sind Lightmaps mit unterschiedlichem Blending)? Und deine Frage ist, ob es möglich ist, die Blend Modes aus Photoshop hinzuzufügen? Habe ich das richtig verstanden? :o
Neue Blend Modes hinzufügen ist kein Problem, ich müsste nur an die Blending-Formeln kommen. :<
Was den LE-Manager angeht: In der Datei LightmapManager.lua, in Zeile 54, ist der Aufruf von game.screen.draw. Dort einfach den Aufruf um den Blend Mode-Parameter erweitern. Der Blend Mode gilt dann natürlich für alle Maps. Es ist selbstverständlich auch möglich den LE-Manager um mehrere Lightmap-Layer zu erweitern. Will den eh noch in der nächsten Zeit überarbeiten, damit Lightmaps eine Tiefe (Z-Position) bekommen.
goldenroy
31.07.2014, 18:13
Das erste Bild ist aus Photoshop (wobei es mehrere Layer sind; der unterste ist die Map und alle drüber liegenden sind Lightmaps mit unterschiedlichem Blending)? Und deine Frage ist, ob es möglich ist, die Blend Modes aus Photoshop hinzuzufügen? Habe ich das richtig verstanden? :o.
Das wäre optimal, ja. Im Moment ist die gängige Art für solche Lichteffekte, den Effekt direkt als Parallax mit der Map einzufügen. Dadurch werden natürlich Events und der Hero nicht vom Effekt erfasst, und diese müssen entweder manuell eingefärbt oder einfach ignoriert werden. Wenn man die direkt als Picture mit dem passenden Blend Mode einfügen könnte, sähe das echt super aus.
Ich kann dir ja mal nen Breakdown der benutzten Blend Modes geben:
Ganz unten ist natürlich die Map
http://i.imgur.com/1D1rQnY.png
Dann Weiches Licht / Soft Light
http://i.imgur.com/NCPUD6p.png
Ineinanderkopieren / Overlay
http://i.imgur.com/01w81Px.png
Farbig Abwedeln / Color Dodge
http://i.imgur.com/GstVPRd.png
Multiplizieren / Multiply
http://i.imgur.com/cj5F40d.png
Und das wird einfach so drübergelegt
http://i.imgur.com/QMxq3Sn.png
Bezüglich der Formeln hab ich nicht wirklich Ahnung von der Implementierung, ich kann lediglich etwas googlen und >>sehr<< (http://en.wikipedia.org/wiki/Blend_modes) >>vielversprechend<< (http://www.deepskycolors.com/archive/2010/04/21/formulas-for-Photoshop-blending-modes.html) >>aussehende<< (http://www.simplefilter.de/en/basics/mixmods.html) >>Ressourcen<< (http://photoblogstop.com/photoshop/photoshop-blend-modes-explained#BlendModeDescriptions) finden. °-o (Die obigen Bilder wurden übrigens in Photoshop CS5 gemacht, ich weiß nicht, ob sich da was über die Versionen geändert hat.)
Hm, ok. Multiply ist eh schon drin. Color Dodge und Overlay sollten kein Problem sein. Soft Light könnte für die Echtzeitanforderungen eines Spiels aber zu langsam sein, zumindest in der "exakten" Version (Wurzel muss gezogen werden). Das könnte ich aber mit einem LUT, oder mit einer angenäherten Version beschleunigen. Ich teste es mal am Wochenende aus.
@goldenroy:
Sorry, aber daraus wird nichts. Die Blend Modes sind ungeeignet für Software Blending in Echtzeit. Habe die Blend Modes bis jetzt zwar nur in C++ ausprobiert, aber selbst in Assembler wird sich vermutlich nicht viel ändern. Hätte ich bloß OpenGL + Shader zu Verfügung... :/
goldenroy
03.08.2014, 17:50
Okay, das ist schade, aber nicht allzu tragisch. ^-^
Mir ist aber noch eine andere Sache aufgefallen: Gibt es einen simplen Weg, um festzustellen, ob sich ein Charakter bewegt? <Character>.moving gilt ja nur fürs Bewegen durch Move Event und es gibt afaik auch keinen Sprite-Offset (wie weit die Grafik vom eigentlichen Eventblock entfernt ist, wenn das != 0 ist, dann ist das Event ja in Bewegung). Es gibt natürlich den üblichen Weg über das abgleichen von Koordinaten, aber vielleicht hat Dyn ja Zugriff auf was simpleres als das. :0
Gibt es einen simplen Weg, um festzustellen, ob sich ein Charakter bewegt? <Character>.moving gilt ja nur fürs Bewegen durch Move Event und es gibt afaik auch keinen Sprite-Offset (wie weit die Grafik vom eigentlichen Eventblock entfernt ist, wenn das != 0 ist, dann ist das Event ja in Bewegung). Es gibt natürlich den üblichen Weg über das abgleichen von Koordinaten, aber vielleicht hat Dyn ja Zugriff auf was simpleres als das. :0
Echt? Das war mir noch gar nicht bewusst. Kann's jetzt auch nicht ausprobieren, da ich mitten in einem Systemwechsel stecke.
Soweit ich mich erinnern kann, haben Character-Objekte aber einen Haufen Attribute, anhand derer der Maker Bewegungen interpoliert. Das heißt, es gibt höchstwahrscheinlich einen Weg herauszufinden, ob ein Character gerade in Bewegung ist, unabhängig davon, ob ein Move-Event oder was auch immer den Character bewegt. Ich schau mal was sich machen lässt, sobald ich wieder die Gelegenheit bekommen.
Beim onComment des DynRPG wird ja als Argument die EventID des entsprechenden Events übergeben.
Gibt es eine Möglichkeit diese ID auch beim RPGSS zu übergeben (z.B. mit einem zusätzlichen @callID das als erstes Argument die EventID an die LUA-Funktion übergibt.
Edit:
Warum wirft dieses Stück Code den Fehler "no member named 'charsetId'"? Ich möchte gerne das Charset durch das Script ändern lassen. Oder ist das nicht möglich?
function change(eventID)
event = game.map.findEvent(eventID)
event.charsetId = 2
end
Beim onComment des DynRPG wird ja als Argument die EventID des entsprechenden Events übergeben.
Gibt es eine Möglichkeit diese ID auch beim RPGSS zu übergeben (z.B. mit einem zusätzlichen @callID das als erstes Argument die EventID an die LUA-Funktion übergibt.
Ja, ist möglich. Ich baue es in die nächste Version ein.
Warum wirft dieses Stück Code den Fehler "no member named 'charsetId'"? Ich möchte gerne das Charset durch das Script ändern lassen. Oder ist das nicht möglich?
function change(eventID)
event = game.map.findEvent(eventID)
event.charsetId = 2
end
Weil ich noch keinen Setter für das charsetId-Attribut geschrieben habe.
Bei einigen Attributen macht eine Zuweisung keinen Sinn, z.B. weil es keine Auswirkung hätte. Dort, wo ich mir nicht sicher war (und zu faul war zum Testen :>), habe ich den Setter vorerst ausgelassen.
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.