Ergebnis 1 bis 6 von 6

Thema: [VX Ace] Probleme mit Tileset-Wechsel

  1. #1

    [VX Ace] Probleme mit Tileset-Wechsel

    Moin,

    vielleicht habt ihr eine Idee, wie ich mein kleines Problem elegant lösen kann.

    Und zwar ist es so: In meinem Spiel kommt eine Burg vor, die von Schwarzmagiern erobert wurde. Man erobert sie im Spielverlauf zurück. Solange sich die Schwarzmagier dort befinden, ist die Burg düster, voller Schwarzmagier-Kram und Schutt. Nach der Rückeroberung und einer gründlichen Aufräum-Aktion sieht sie dann wieder ganz normal aus, regelrecht sympathisch.
    Ich dachte mir, ich könnte mir Arbeit sparen, indem ich alle Events innerhalb der Burg gleich so anlege, dass sie sowohl vor als auch nach der Rückeroberung "gültig" sind. Dann müsste ich nach der Rückeroberung nur das Tileset wechseln und könnte zwei ganz unterschiedliche Atmosphären im gleichen Gebäude erzeugen.

    Gesagt, getan, und es funktioniert auch (die Bilder zeigen einen Beispiels-Ausschnitt der Burg).

    Klicke auf die Grafik für eine größere Ansicht 

Name:	BurgST_vorher.png 
Hits:	16 
Größe:	205,7 KB 
ID:	24385 Klicke auf die Grafik für eine größere Ansicht 

Name:	BurgST_nachher.png 
Hits:	17 
Größe:	188,1 KB 
ID:	24386

    Bis auf eine Kleinigkeit.
    Ich lasse das Tileset in den jeweiligen Maps per Event wechseln. Das ist kein Problem, wenn ich beim Betreten der Map den Bildschirm ausblende und erst nach dem Tileset-Wechsel wieder einblende. Allerdings: Wenn ich auf den Maps, wo der Tileset-Wechsel stattgefunden hat, speichere und dann wieder neu lade, sieht man für einen Moment noch das alte Tileset, bevor die Grafik auf das neue "umspringt". Mir ist klar, woran das liegt - die Map lädt sich mit dem alten Tileset. Das Event, das für den Tileset-Wechsel sorgt, braucht einen Moment, um sich zu aktivieren.

    Das ist natürlich kein Gamebreaker, aber trotzdem unschön. Das Speichern in diesem Bereich zu verbieten, ist sicher keine schlaue Lösung.

    Ich könnte natürlich einfach die Maps kopieren und mit dem neuen Tileset neu anlegen. Aber ich bin notorische Map-Sparerin *g* und bräuchte die zusätzlichen Maps bis auf das genannte Detail auch gar nicht.

    Habt ihr eine Idee, wie man das Problem umgehen kann?

    Geändert von Coppelia (20.12.2017 um 10:04 Uhr)

  2. #2
    Zitat Zitat von Coppelia Beitrag anzeigen
    Ich könnte natürlich einfach die Maps kopieren und mit dem neuen Tileset neu anlegen. Aber ich bin notorische Map-Sparerin *g* und bräuchte die zusätzlichen Maps bis auf das genannte Detail auch gar nicht.
    Also ich fände diese Idee gar nicht so schlecht, je weniger Events desto flüssiger das Spiel - was zwar bei einer solchen Map wie auf den Screenshots (kA wo du dieses Tileset-Wechsel noch verwendest) und bei den heutigen Rechner sicher kein Beinbruch ist. Aber die Maps sind doch so klein in ihrer Größe da stört das doch niemanden mehr. ^^ Mit den neuen Makern kenn ich mich nicht aus, irgendwer dürfte sicherlich eine Lösung parat haben, die dir besser gefällt aber dein erster Lösungsansatz würde ich ansonsten auch noch im Hinterkopf behalten. Geht easier von der Hand und spart unnötige Events.

  3. #3
    Danke schon mal für die Antwort. Ja, ich behalte den Lösungsansatz auch auf jeden Fall im Hinterkopf und wüsste momentan keinen anderen.
    Events sparen würde ich dadurch aber nicht, weil die Events ja so oder so vorhanden sind. Ich habe sie halt nur so programmiert, dass sie für beide Tilesets geeignet sind. Ok, einige wenige storyrelevante Events würde man vielleicht sparen, aber so besonders fällt das eigentlich nicht ins Gewicht. Ich könnte höchstens die Seiten der Events reduzieren, wodurch ich dann an jedem Event herumfisseln müsste. Das wäre auch ein bisschen nervig, weil die Burg relativ groß ist. Das sieht man auf dem Beispielsbild nicht.

    Ich versuche halt Maps zu sparen, weil ihre Anzahl beim Ace begrenzt ist (auf 500, glaube ich). Und, ja, das könnte bei meinem umfangreichen Spiel wirklich ein Problem werden. Vielleicht wäre die bessere Frage, wie ich die Anzahl der Maps erweitern kann.

    Wie auch immer, ich beginne mich mit der Idee anzufreunden. Es würde im weiteren Spielverlauf schon einiges bei der Programmierung unkomplizierter machen.

    Geändert von Coppelia (20.12.2017 um 12:15 Uhr)

  4. #4
    Hey Coppelia,

    du kannst folgendes Script über Main einfügen.
    CH_TILESET füllst du mit den Switches, die aktiv sein müssen. Im Array ist die erste Zahl dann die ID des neuen Tilesets gefolgt von beliebig vielen MapIDs, für welche das Script ausgeführt werden soll.
    Habe dir ein Beispiel (rot markiert) eingefügt, welches du durch die richtigen Werte ersetzen musst. In dem Beispiel würde, wenn Switch 153 ON wäre, auf den Maps 79,80 und 81 das Tileset auf 45 geändert.
    Wenn Switch 555 ON wäre, würden die Maps 82 und 83 das Tileset 46 zugewiesen bekommen.

    Bei jedem Laden der Map wird geprüft, ob der entsprechende Switch aktiv ist und wenn ja, ob diese Map "vom Wechsel betroffen" ist.
    Das sollte funktionieren - und so wird die Map beim Laden schon richtig dargestellt - nicht erst hinterher.

    Code:
    #SwitchID=>[NewTilesetID,Map1,Map2,Map3....]
    class Game_Map
      CH_TILESET = {153=>[45,79,80,81],555=>[46,82,83]}
      
      alias ldt_setup_events setup_events
      def setup_events 
        CH_TILESET.each do |ckey,cval|
          if($game_switches[ckey])
            if(cval[1..cval.size].include?(@map_id))
              @tileset_id = cval[0]
              @map.tileset_id = cval[0]
              break
            end
          end
        end
        ldt_setup_events
      end  
    end
    Edit: PS: Ich mache dies extra in der "setup_events" Methode, statt in der allgemeine "setup" Methode von Game_Map, weil du bereits viele Scripts verwendest, die Game_Map Methoden umschreiben. Die "setup_events" Methode ist die erste, auf welche das Tileset Einfluss nimmt und am leichtesten per Alias aufzurufen, weil ich von der Methode selbst nichts ändern muss und so keine Probleme auftreten sollten, falls die anderen Scripts auch darauf zugreifen.

    Geändert von Linkey (20.12.2017 um 13:02 Uhr)

  5. #5
    Wow, Linkey, das ist toll! Ich konnte es heute morgen ausprobieren, und es funktioniert super. Mal wieder. Ganz herzlichen Dank. Dann kann ich mir die zusätzlichen Maps ja doch sparen.
    Das wird natürlich in die Credits aufgenommen.

    Eigentlich könnte so eine Funktion gut zum Standard des Makers gehören - wozu sonst tauscht man Tilesets aus?

    Ich tausche tatsächlich auch noch an einer anderen Stelle des Spiels das Tileset aus, und natürlich trat das Problem dort auch auf. Aber es war bisher weder mir noch jemandem sonst aufgefallen.

  6. #6
    Klasse!

    Das wäre ja nur aufgefallen, wenn man darin speichert und dann so steht, dass es beim Laden direkt auffällt. Wenn man nicht genau darauf achtet, sieht man das nicht.
    Gerade beim "Laden" nutzt man die Zeit nochmal um irgendetwas anderes zu machen und schon übersieht man es

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •