Spielstandsinformationen Manipulieren

  • #1, z anna-arnoldWednesday, 29. June 2016, 10:35 hodinky 8 years ago
    Guten Morgen,
    Davon Abgesehen, dass es mir noch ein Rätsel ist, wie ich mein Speicherplatz-Design (der braune Halbkreis...) optisch Sinnvoll umsetzen kann, stehen wir momentan vor dem Rätsel, wie wir nicht nur Screenshot, Name der Kulisse, und Datum und Uhrzeit Anzeigen lassen können, sondern auch weitere bzw andere Informationen. Anstelle des Namens der Kulisse würde auch der Name des Spielabschnittes sich gut tun, ebenso wie eine Prozentanzeige, wie weit man im Spiel ist. Daneben wäre es bei uns tatsächlich Sinnvoll, bei Klick auf einen belegten Speicherslot den Tagebuchinhalt ebendieses rechts im Fenster anzeigen zu lassen. Wie können wir auf die Informationen zugreifen bzw wie würdet Ihr euch an das Problem annähern?
    Das Bild soll das veranschaulichen, was ich nicht in Worte gefasst bekomme grin
    Ich frage mich manchmal auch, warum wir es uns so kompliziert machen...

    Bažant

    95 Posts


  • #2, z anna-arnoldWednesday, 29. June 2016, 10:55 hodinky 8 years ago
    Können wir vielleicht das Klassische Speichermenü generell umgehen und uns selbst was zusammenskripten? Wo finden wir da Informationen zu? Eigentlich wollten wir das klassische Menü durch unser Interface fast komplett unnötig machen. Jetzt ist so die Frage, wie weit wir gehen können. (Und natürlich wie Benutzerfreundlich das Ganze dann sein wird...)

    Bažant

    95 Posts

  • #3, z sebastianWednesday, 29. June 2016, 11:19 hodinky 8 years ago
    Die ganzen Informationen, die ihr braucht sind leider nicht aus dem normalen speichersystem herauszubekommen. Zudem scheint es mir, dass ihr zusätzlich das Menü eher als Interface über die aktuelle kulisse zu blenden, richtig?
    Hier macht es dann wirklich sinn ein eigenes speichersystem zu ntzen, welches auf autosaves aufbaut. Hierin werden aber leider nicht screenshot, fortschritt, etc als nutzbare Variablen für das System gespeichert. Daher muss man neben dem normalen speichern in einer extradatei das ganze hinterlegen, damit es abfragbar ist.

    Das ganze ist sehr aufwendig, lässt sich aber mit lua und actionparts recht gut umsetzen.

    Ich plane irgendwann mal ein tutorial zu machen, warte aber akut noch auf die neuste VSversion...

    Kapitán

    2346 Posts

  • #4, z sebastianWednesday, 29. June 2016, 11:21 hodinky 8 years ago
    Ps: hab ich für mich schon umgesetzt. Werde mal versuchen dir grob mal was niederzuschreiben worauf zu achten ist, wenn ichbwieder von der arbeit gekommen bin. Eine ganze Anleitung kannbich nur leider nicht geben, da ich für mich viel extrakram genutzt hab, der ggf für dich nicht nötig ist

    Kapitán

    2346 Posts

  • #5, z anna-arnoldWednesday, 29. June 2016, 13:35 hodinky 8 years ago
    Zudem scheint es mir, dass ihr zusätzlich das Menü eher als Interface über die aktuelle kulisse zu blenden, richtig?

    Genau, der Spieler soll sich vor allem über das Interface orientieren. Aber noch wichtiger als die Navigation über das Interface ist uns Tatsächlich das Tagebuch, die Prozentanzeige und der Name des aktuellen Kapitels.
    Werde mal versuchen dir grob mal was niederzuschreiben worauf zu achten ist, wenn ichbwieder von der arbeit gekommen bin.

    Danke ich freue mich schon auf Deine Niederschrift. grin

    Bažant

    95 Posts

  • #6, z sebastianWednesday, 29. June 2016, 22:24 hodinky 8 years ago
    Uff, dauert ggf noch etwas da ich jetzt grad merke, was ich da für einen aufwand getrieben habe.

    Kapitán

    2346 Posts

  • #7, z anna-arnoldFriday, 01. July 2016, 10:50 hodinky 8 years ago
    Ist okay, wäre aber echt klasse wenn du dir die Mühe machst und uns was aufschreibst smile

    Bažant

    95 Posts

  • #8, z sebastianSaturday, 02. July 2016, 22:31 hodinky 8 years ago
    Also...
    Es wird in deinem Fall etwas schwierig, da du gerne anscheinend dein Tagebuch komplett darstellen möchtest (sprich den Inhalt musst du in eine externe Datei speichern - auslesen des Spielstands geht ja leider nicht) und darstellen von Screenshots passend zum Spielstand -was ich selber noch nicht kenne und gemacht habe. Theoretisch sollte das aber ebenfalls das speichern eines Dateipfads zum screenshots sein, der dann ggf. noch per Lua skaliert werden müsste. Diese zwei Sachen muss ich leider hier erstmal außen vor lassen, da ich mich nicht weiter damit beschäftigt habe solche Dinger einzubinden.
    Generell sollten das abfragen dieser Daten aber gleich laufen, wie zB die Bezeichnung eines Spielstands aus einer Datei.

    Es kann sein, dass diese "Anleitung" auch nicht zu 100% komplett ist (oder ich irgendwo einen Gedankenfehler habe weil deine Speichermenüidee etwas von dem Abweicht, was ich gebastelt habe), aber ich hoffe sie gibt für vieles zumindest ein Grundverständnis oder liefert zumindest Gedankenanstöße.

    ---

    Vorbereitungen:
    Für jeden Spielstand solltest du in deinem Speichermenü-Interface eine Value anlegen. In dessen Stringwert wird später zum Beispiel folgendes reingeschrieben bzw. dann auch in eine externe Datei gespeichert werden:
    kapitel1#13#01.07.2016#21:15#path/to/screenshot_png#weitere.daten
    

    Als Trennzeichen habe ich hier eines genommen, was theoretisch nicht vorkommen sollte (#). Per Luascript kann man diesen String später wieder aufteilen und auf dessen einzelne Werte zugreifen.
    Im Beispielstring stehen die Werte für
    - Kapitelname
    - Prozentwert des Fortschritts
    - Datum
    - Uhrzeit
    - Screenshotpfad (gehe ich nicht weiter drauf ein wie gesagt)
    - Weiteres was du ggf. speichern möchtest
    


    Weiteres:
    Wirst du nur eine Seite an Spielständen nutzen oder mehrere zum durchblättern?
    Wenn mehrere (bis 99), macht es natürlich sinn Anstatt 99 Conditions zu setzen, welchen Spielstand du grade im Menü angeklickt hast um ihn zu überschreiben hier auch Values zu nutzen, die die aktive Seite, den aktiven Slot auf der Seite und den daraus berechneten wirklich markierten Slot speichern
    Beispiel: Du hast 10 Spielstände pro Seite.
    Slot 6 auf Seite 2 Ist markiert = Spielstand 16 ist angewählt.
    Für die Berechnung gibt es mehrere herangehensweisen, aber diese war meine:

    local page_number = Values["save_load_page"].Int
    local selected_slot = Values["selected_slot"].Int
    local selected_savestate = 0
    if selected_slot > 0 then
      selected_savestate = (8 * page_number) - (8 - selected_slot)
    else
      selected_savestate = 0
    end
    getObject("Values[selected_savestate]"):setValue(VValueInt, selected_savestate);
    

    Diesen Code habe ich in einen "Execute Script" Action Part gepackt, den ich immer dann aufrufe, wenn ich einen der (hier) 10 Slots auf der aktiven Seite anklicke.

    Die "Seite vor/Seite zurück" Buttons in dem Speicherinterface addieren/subtrahieren einfach den Wert der Value "save_load_page" um 1 und falls 0 oder 10 erreicht ist, wird nicht mehr weitergezählt (10 Seiten = maximum)
    Dazu wird dann noch ein "execute by another Action" Action part aufgerufen, der Object Texte mit dem Stringinhalt des spezifischen Spielstands anzeigt.
    In deinem Fall muss aber der String der in diesem Spielstand gespeichert ist zuvor noch per Lua aufgeteilt und dessen Einzelteile noch in andere Values gespeichert werden, damit diese Sinnvoll auf dem Bildschirm dargestellt werden. Lege also für jeden einzelnen Wert nochmal Values an:
    saveattribute_1 (kapitel), saveattribute_2 (prozentweert), etc.
    Diese Werte werden für jeden Spielstand neu überschrieben. Es sind also temporäre Variablen.

    Bevor du also ein DisplayText Action Part einsetzen kannst, also ein "Execute a Script Action Part nutzen und die split funktion von Lua einsetzen:
    local savegame = Values["saveslotnamewoderstringabgespeichertist"].String
    for i in string.gmatch(example, "#") do 
      Values["saveattribute_"..i..""].Int" = i
    end
    

    Danach kannst du per "Display Object Text" ein Objekttext mit dem entsprechenden ValueString an beliebiger Position darstellen.

    Dies müsste dann noch für die anderen Spielstände auf der aktivien Seite wiederholt werden.

    Die Darstellung der ganzen Werte wäre damit erledigt. Theoretisch sollten damit also schonmal (unabhängig vom Speichern die ganzen Werte aus einer Value ausgelesen, aufgeteilt in Ihre Bereiche und dargestellt werden können.
    Zudem ist mit dem umblättern und das Berechnen des aktiven Speicherstandes beim anklicken auch schon geschehen. Dies wird dann gebraucht, wenn es wirklich ums Abspreichern/Laden geht.

    Mit den oben stehenden Sachen könntest du zumindest schonmal schauen, ob das ganze soweit klappt, dass wenn du die Werte einer Value in VS veränderst, ob dies auch korrekt beim darstellen ingame umgesetzt wird.

    Kapitán

    2346 Posts

  • #9, z sebastianSaturday, 02. July 2016, 22:32 hodinky 8 years ago
    Für das speichern und das erstellen einer "savegames.ini" komme ich dann nochmal später wieder wink

    Kapitán

    2346 Posts

  • #10, z anna-arnoldWednesday, 06. July 2016, 09:27 hodinky 8 years ago
    Danke bis hierhin. Wir müssen eh erst einmal mit Lua warm werden. grin

    Wenn ich so über all die Features nachdenke, die wir im Interface/Menü einbinden wollten, so werden wir ganz schön viel Skripten müssen. shock Wir müssen Masochisten sein grin
    Naja aber danach können wir uns, sollte das Projekt schlecht ankommen, immerhin bei der Konkurrenz bewerben grin

    Bažant

    95 Posts

  • #11, z sebastianWednesday, 06. July 2016, 13:57 hodinky 8 years ago
    Es ist auf jeden fall. Möglich. Wie gesagt werde ich auch irgebdwann in naher Zukunft mich mal tansetzen und ein bisschen was tutorial mäßig niederschreiben ider gar als youtube Video aufnehmen. Ich warte hier halt noch ein wenig auf die devs wegen dem neuen visionaire editor...

    Kapitán

    2346 Posts