Schlagwort: Tools

  • Comics im Game

    2025-07-07 – Übertrag

    Das Storytelling im Game wird neben Environmental-Storytelling auch via Cut-Scenes gezeigt. Die Cut-Scenes sind geführte Comic Szenen welche ich mit Aquarell-Farben und Tinte auf Wasserfarbepapier erstelle.

    Vorbereitung

    Ich habe in meinen Notizen eine Grobe Struktur wohin die Story geht in Key-Punkte der Story, aber für jeden neuen Story-Abschnitt erstelle ich eine Unterstruktur. Für jede neue Seite schaue ich mit die Letzten Seiten Seiten an uns übernehme Farben und Items in der Szene falls nötig. Hier kommt wieder das gute Whiteboard zum Einsatz.

    Bleistift-Phase

    Dann überlege ich wo ich Charaktere und Objekte platziere, hier berücksichtige ich Pageflow und Items auf der letzten Page/Panel. Oft Thumbnaile ich auf dem Whiteboard und mit leichten Bleistiftstrichen vor um die Positionierung gut hin zu bekommen. Ich nutze hier einen kleinen Beamer um meine Referenz direkt neben mich auf den Tisch zu strahlen, so muss ich meinen Kopf nicht immer drehen .

    Inking Phase

    Nach dem Skizzieren mit dem Bleistift, folgt das Linework mit Microns, ich persönlich bevorzuge recht dicke Marker, ein Sakura Micron 0.8 . Hier mache ich jetzt auch präziseres Hatching und achte auf Line-Thickness, entferntere Linien zur Lichtquelle sind Dicker.

    Sobald die Linien alle gezogen wurden, wird der Bleistift aus der ersten Phase wieder weggemacht für saubere Linien. Wenn ich einen Blick darauf habe wie das Bild ohne Bleistift aussieht, suche ich nach Fehlern, Lücken und schwachen Stellen und ziehe dort nochmal einige Linien nach.

    Da ich Wasserfeste Liner nutze, steht der Wasserfarbe jetzt nichts mehr im Weg.

    Coloring

    Jetzt kommt die Farbe drauf, ich nutze am liebsten Aquarell Farben, da ich gerne recht schnell arbeite. Hier habe ich meistens die vorherigen Panels parat, um zu sehen wie ich die Farben mische, damit diese möglichst gleich im Endergebnis aussehen. Sollte mit den Farben aber was nicht stimmen, kann ich diese auch in der Nachbearbeitung mit Bildbearbeitungsprogrammen nochmal überarbeiten.

    Die Hilfskraft

    Natürlich bekomme ich auch tatkräftige Unterstützung bei der Arbeit von meiner Hilfstkraft. Hier ist Queenie, meine fusselige Mainecoon Mitarbeiterin. Ich wette im Spiel werden hier und da später Katzenhaare erkennbar sein, die ich nicht gesehen habe und mit eingebaut habe. Aber das gehört dazu

    Bearbeitung

    Sobald Das Bild fertig gepinselt und gekritzelt ist, scanne ich es ein, hierfür nehme ich entweder einen Cannon Lide 300 oder für A3 einen umfunktionierten alten Drucker mit einem alten A3 Scanner. Für Größere Szenen nutze ich auch gerne mal größeres Papier um etwas mehr Platz zu haben.

    Comic Player (Part 1)

    Die Comic-Panels werden in einen Comic Player den ich in Godot 4.3 gemacht habe eingefügt, hier muss ich noch ein wenig drüber arbeite, zu Beispiel brauche ich noch Sounds, Word-Baloons sowie ein System für die Baloons damit man die auch lesen kann, deshalb werde ich über den Player selbst nochmal einen Blog-Post machen sobald diese Fragen beantwortet wurden

    Vielen Dank für die Aufmerksamkeit!

    oder zur Gestaltung der Lebensleiste

    es gibt ein Short Hierzu
    und ein TikTok

  • RPG – Textbox und wie sie eingebaut wurde

    2025-03-20 – Übertrag

    Um die Geschichte besser erzählen zu können, habe ich eine Textbox erstellt. Zuerst hatte ich mich informiert, wie so etwas geht, anhand eines Youtube Videos.
    Das Video erstellt eine rudimentäre Textbox, diese ist schonmal gut, aber genügt meinen Anforderungen nicht.

    Charaktere

    Für bessere Immersion braucht die Textbox noch das Bild und den Namen des Sprechers. Manchmal verändert sich der Sprecher, in meinem Spiel muss man auf die Kachel der Hütte des Sprechers um mit ihm zu interagieren. Es wurde auch eine kleine Animation auf die Kachel gesetzt um der Overworld noch etwas mehr Bewegung und Leben zu geben.

    Der Charakter hier ist Pheus, seine Hütte wird direkt zu Begin des Spiels in der Mitte der Karte erstellt. Er ist der Mentor in der Geschichte, und hilft Taja -der Heldin- wieder auf die Beine. Seine Hütte ist direkt im Blickfeld des Spielers wenn man das Spiel das erste mal startet.

    Mehr zu Taja!

    Mit einem identifizierbaren Kacheltyp kann ich auch ein Modul schreiben, welches darauf prüft ob der Spieler Interaktion nutzt wenn er auf PHEUS_HUETTE steht.

    func checkForTalker():

    if State.Map_Array[State.Shared_Player_Position.x][State.Shared_Player_Position.y] == „PHEUS_HUETTE“:

    So lassen sich auch mehrere Charaktere erstellen, welche auf unterschiedlichen Kacheln aktiviert werden.

    Den Dialog selbst lade ich aus einer JSON Datei. Die Dialog-Textblöcke in der JSON Datei sind Indexiert, und werden runtergebrochen auf Textblöcke die für die Textbox verarbeitbar sind.

    Ich nutzte eine JSON Datei um einen Zentralen Punkt zu haben wo die Textausgaben gespeichert sind, um diese im Laufe der Entwicklung einfacher verändern zu können.

    Code Logik

    Das laden des Textes aus der JSON Datei braucht eine kleine Funktion, welche die Datei öffnet, den Inhalt in einer Variable kopiert und dann wieder schließt.

    ressource ist hier der Pfad zur JSON Datei.

    Den Text herunterzubrechen war eine kleine Herausforderung, da es zuerst mitten im Wort runtergebrochen wurde. Ich habe das dann gelöst mit:

    var lastSpace = clip48.rfind(“ „)

    rfind(“ „) sucht das letzte Leerzeichen und speichert dessen Position, später habe ich dann einfach die Brüche an dieser Position gemacht.

    Ich habe die Struktur so geschrieben, dass die Texte welche der Charakter sagt indexiert sind. Zum Beispiel ist Index 0 der Erste Satz welcher zu Taja am Start des Spiels gesagt wird:
    „Pheus“: {
    „0“: „Ich bin Pheus, ich habe dich aus dem Wasser an der Küste gefischt und dir wieder auf die Beine geholfen!“,

    Ich setzte im Spiel später Milestones welche nach Abschluss mancher Story Beats gesetzt werden, mit diesen wird dann auch Progression im Dialog gemacht.

    Schwierigkeiten

    Die meisten Schwierigkeiten entstanden durch die Abfolge, also Wann was passiert. Ich hatte zum Beispiel eine Lange Zeit den Text doppelt ausgegeben bekommen.
    Bis ich dahinter kahm, dass ich den Charakter nochmal anspreche, da ich auf dessen Feld stehe und die Aktionstaste für Fortfahren in seinem Text nutze ist viel Zeit vergangen.
    Lösungsansätze hierfür waren: einen Switch zu erstellen, der bei verlassen des Feldes erst wieder auf true geht. Sowie ein Timer -welchen ich letztendlich behalten habe- der das ansprechen einige Sekunden verhindert.

    Der Timer wird gestartet wenn der Text gelesen wurde.