Logo: RMCraft

logo 'RMCraft' by ryg :: rmarchiv.tk is brought to you with love.

  • In der Vergangenheit habe ich bereits zwei Arten von Schuss-KS entwickelt, die technisch unterschiedlich funktionieren. Ich würde gerne eine dritte perfektionierte Art entwickeln, die im Grunde auf der zweiten basiert, aber dabei dessen größte Schwäche ausmerzt, was zwar basierend auf der ersten Art vermutlich leichter zu bewerkstelligen wäre, diese aber wiederum ihre ganz eigenen Probleme mit sich bringt, weswegen ich die zweite Art überhaupt erst entwickelt habe. Aber erstmal zur Erklärung, was ich mit erster und zweiter Art meine.

    Erste Art von Schuss-KS (klassisch): Diese kommt in Makerspielen am häufigsten zum Einsatz. Es wird die Position der Spielfigur ermittelt und bei Abgabe eines Schusses das Projektil-Event abhängig von der Blickrichtung +/- 1 X/Y Tile vor die Spielfigur plaziert und direkt danach der Blickrichtung der Spielfigur nach bewegt (abgefeuert). Wenn sich dabei die Projektil- und Gegnerkoordinaten überschneiden, ist das der Trigger für den gewünschten Effekt. (Schaden, Animation, etc)

    Der Haken: Es kommt häufig vor, dass der Gegner, obwohl er augenscheinlich vom Projektil getroffen wurde, keinen Schaden erleidet. Ich kann mir das nur so erklären, dass ein Event beim Übertritt in ein anderes Tile sofort dessen Koordinaten annimmt, während die Grafik des Events noch so und so lange hinterhertrödelt; was dann so aussieht, als ob man durch den Gegner hindurch danneben geschossen hat und die Technik dahinter buggt. Ist dem so? Jedenfalls, um dieses Problem zu beseitigen, hatte ich eine neue Art von Schuss-KS entwickelt, das ohne Projektil-Events auskommt.

    Zweite Art von Schuss-KS (ohne Projektil): Bei Abgabe eines Schusses entlang der X-Achse (links/rechts) wird ermittelt, ob Spielfigur und Gegner die gleiche Y-Koordinate teilen. Bei Abgabe eines Schusses entlang der Y-Achse (hoch/runter) wird ermittelt, ob Spielfigur und Gegner die gleiche X-Koordinate teilen. Das muss allerdings noch weiter spezifiziert werden, damit aus der Schuss-Gerade eine Schuss-Halbgerade wird; also nur den Bereich auf der Schuss-Achse in Blickrichtung der Spielfigur betrifft. Sonst würde man Gegner auch mit dem Rücken zugewandt abknallen können. Hierbei wird berechnet, ob die X respektive Y Koordinate der Spielfigur, welche nicht deckungsgleich mit der des Gegner ist, einen größeren oder kleineren Zahlenwert hat als jene Koordinate des Gegners. Teilen sich beispielsweise Spielfigur und Gegner die selbe Y-Koordinate, dann ist der X-Koordinatenwert des Gegners zwangsläufig entweder kleiner ODER größer als der der Spielfigur; kleiner wenn sich der Gegner relativ zur Spielfigur links auf der Map befindet und größer, wenn rechts. Wenn also der Fall auftritt, dass man nach links schießt und die Gegner X-Koordinate jedoch größer ist (Gegner befindet sich relativ zur Spielfigur rechts auf der Map), bedeutet das, man schießt in die entgegengesetzte Richtung und nicht zum Gegner gewandt. Ist die Blickrichtung allerdings nach rechts UND die X-Koordinate des Gegners ist größer als die der Spielfigur, dann befindet sich der Gegner in der Schusslinie, und erst dann wird der Effekt getriggert. Die Werte müssen natürlich für jede weitere Fallunterscheidung logisch zueinander abgeglichen werden mit dem Hintergrund, dass sich der Koordinaten Ursprung einer Map oben links befindet; also eine invertierte Y-Achse hat, verglichen mit normalen Graphen, die man so aus der Schule kennt, bei denen sich der Ursprung unten links befindet.

    Der Vorteil: Gegner innerhalb der Schusslinie werden instant vom Schuss erfasst, ohne dass sich dabei ein sichtbares Projektil durch die Luft bewegt und ggf. nicht trifft. Dadurch wird der Darstellungsfehler aus der ersten Schuss-KS Art, welche auf Event-Projektile zurückgreift, negiert. Wenn man bedenkt, dass der Sichtbereich auf einer Map nicht viel größer sein dürfte als vielleicht 300m², übertragen auf eine entsprechende Realdarstellung und Projektile mit einer enormen Geschwindigkeit durch die Luft fliegen, sodass 15-20 Meter in nur wenigen Millisekunden zurückgelegt werden, was für das blanke Auge gar nicht sichtbar ist, erscheint mir das realistisch.

    Der Haken: Hindernisse werden dabei nicht berücksichtigt und das ist die weiter oben angesprochene Schwäche der zweiten Schuss-KS Art. Mir ist nicht klar, wie man auf elegante Weise die zweite Schuss-KS Art modifizieren könnte, damit man nicht durch Hindernisse wie etwa Häuser, Autos o.Ä., welche sich zwischen Spielfigur und Gegner befinden, schießen kann. Dies aber zu bewerkstelligen wäre das angestrebte Ziel bzw. die dritte und perfektionierte Form eines Schuss-KS.

    Eine erste, jedoch unpraktikable Lösungsidee: Die Außenränder jeglicher Hindernisse auf der Map werden mit Events abgedeckt. Danach fließt in die Schussrichtungsberechnung die Fallunterscheidung mit ein, ob der Koordinatenwert eines dieser Hindernismarkierungsevents irgendwo ZWISCHEN denen von Spielfigur und Gegner liegt. Das Problem: man müsste die abgleichenden Fallunterscheidungen für wirklich jedes einzelne Hindernisevent machen und davon würde es je nach Map enorm viele geben. Ich hege starke Zweifel, ob das überhaupt praktikabel ist und das die Performance mitmacht.

    An die Technikfreaks: Wenn ihr anhand der Beschreibung das Funktionsprinzip des zweiten Schuss-KS verstanden habt, wie würdet ihr das Problem mit den Hindernissen in Angriff nehmen? Und zwar auf eine praktikable Art und Weise, auf die ich leider nicht von selbst komme.


    Peperoni edited at vor 3 Monaten
Login is needed to post a message
Login is needed to post a message