Autor Thema: Schrittgeräusche ändern  (Gelesen 2757 mal)

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Schrittgeräusche ändern
« am: 01. Februar 2015, 18:57:14 »
Hallo zusammen,

ich habe die Schrittgeräusche der Personen angepasst. Also wenn Sie über festen Boden laufen haben sie andere als über Grass (vor der Villa). Das funktioniert auch, allerdings gibt es einen unschönen Effekt. Es dauert manchmal sehr lange bis AGS die Schrittgeräusche umschaltet. Das wirkt sehr komisch. Ich habe das ganze mit Regionen und einer neuen VIEW gemacht. (AGS 3.2.1 und MansionSP 1.5)

Damit ihr euch besser vorstellen könnt was ich meine habe ich ein Demo gebastelt (man kann nur vor der Villa rumlaufen).

http://www.datafilehost.com/d/ebf132ad

Unbedingt beim download beachten: Ihr müsst das Häckchen bei "Use our download manager and get recommended downloads" entfernen bevor ihr die Datei runterlädt. Ich weiß nicht was der Downloadmanager sonst alles noch mit runterlädt. Und ein Plugin braucht ihr auch nicht falls ihr mal was hochladen wollt(steht oben auf der Seite), einfach nicht beachten.

Ich habe noch ein Screenshot von der Treppe gemacht, dort sind die zwei Regionen zu sehen:



Wenn man auf die obere Region läuft wird der alte Schrittsound aktiv, bei der unteren der Grass-Sound.

Spielt mal etwas damit rum, dann wisst ihr was ich mit der Verzögerung meine. Wenn man z.B. in der Einfahrt ganz rechts steht und den Link zur Villa anklickt kann es passieren das Syd bis ganz links läuft ohne das das Schrittgeräusch umgeschaltet wird. Klickt man dagegen auf die Grasnarbe und dann weiter ist es besser.

Hat jemand einen Tipp wie man AGS dazu bringen kann schneller umzuschalten (ich habe die changeView Funktion benutzt)? Passende Schrittsounds wären schon cool.
Das Leben ist ein Adventure. Aber ohne Komplettlösung.

Für fast alles gibt es eine logische Erklärung. Für alles andere ein Placebo.

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1243
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Schrittgeräusche ändern
« Antwort #1 am: 02. Februar 2015, 11:48:57 »
Coole Sache!

Ja, in der Originalversion war es ja so, dass man draussen vor der Villa überhaupt keine Schrittgeräusche hatte.

Glaube, keiner würde es als problematisch erachten, wenn man es so wie in der Originalversion umsetzt:

Schrittgeräusche: innen ja / draussen nein


Dann wäre das Problem im allgemeinen gelöst.

Allerdings nicht, wenn Du über MMM hinaus etwas anderes machen möchtest, wo Du die Schrittgeräusche anpassen müsstest.

Aber schon 1990 seit Monkey Island sind die Schrittgeräusche schon aus der Mode gekommen.

Allerdings für MMM sind die noch ein Muß. ;)


BG
der Volltanker

"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Schrittgeräusche ändern
« Antwort #2 am: 15. Februar 2015, 00:34:33 »
Die Region-Events werden nicht während blockenden Funktionen ausgeführt, erst anschließend. Und da die Starterpacks kein "echtes" nicht-blockendes Laufen verwenden, sondern es nur simulieren, entsteht leider dieser unschöne Effekt.
Es gibt zwei Möglichkeiten, das zu beheben:
1) Region-Events mittels repeatedly_execute_always und Region.GetAtScreenXY selbst managen
2) Ein echtes nicht-blockendes Laufen einbauen; das ist allerdings ein ziemlicher Aufwand (es würde das umschreiben sämtlicher Aktions-Funktionen erfordern).

Lösung 1 ist relativ einfach:
[ags]void stepOn(int r) {
  if (player.Room == 3 && r == 1) {
    ...
  }
}

void stepOff(int r) {
  ...
}

Region *oldRegion;
void repeatedly_execute_always() {
  Region *currentRegion = Region.GetAtScreenXY(player.x, player.y);
  if (currentRegion != oldRegion) {
    if (oldRegion != null) stepOff(oldRegion.ID);
    if (currentRegion != null) stepOn(currentRegion.ID);
  }
  oldRegion = currentRegion;
}[/ags]
« Letzte Änderung: 15. Februar 2015, 00:35:20 von KhrisMUC »

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Schrittgeräusche ändern
« Antwort #3 am: 15. Februar 2015, 11:23:21 »
@KhrisMUC

Die Idee ist gut, hat aber einen Hacken. Wenn man das so macht wird, während der character über die Region läuft die VIEW ständig wieder auf 1 oder 65 (Grass-Sound) gesetzt was gleichzeitig dazu führt das die Geh-Animationsgrafik auch immer 1 oder 65 ist. Das bedeute das für den Moment die Geh-Animation "einfriert", das sieht dann so aus als würder der Character Schlittschuh laufen.

Man kann das Problem mit einer zusätzlichen globalen bool Variable lösen, ist eben etwas mehr Aufwand. Ich habe den Code von dir auch nicht komplett übernommen, die stepOn und stepOff Funktionen braucht man im prinzip nicht. Ich habe den notwendigen Code direkt in die repeatedly_execute_always Funktion im GlobalScript geschrieben:

[ags]if (player.Room == 41 || player.Room == 5){
    Region *currentRegion = Region.GetAtRoomXY(player.x, player.y);
    if (currentRegion.ID == 3){
      if (schalter == false){
        schalter = true;
        player.ChangeView(1); //Beton
      }
    }
    if (currentRegion.ID == 2 || currentRegion.ID == 4) {
      if (schalter == true){
        schalter = false;
        player.ChangeView(65); //Grass
      }
    }
  }[/ags]

Die GetAtScreenXY Funktion musste ich durch die GetAtRoomXY ersetzen weil es die GetAtScreenXY nicht gibt (sagt AGS).

So scheint es mit akzeptablem Aufwand machbar zu sein. Man muss natürlich sehr aufpassen da in unterschiedlichen Räumen die selben RegionIDs vorkommen können. Im gezeigten Beispiel ist die Region 3 in beiden Räumen für den Beton-Sound zuständig, ein Zufall. Durch abfragen der Raumnummer lässt sich das natürlich managen falls es unterschiedliche Regionen sind.

EDIT: Ich stelle gerade fest das es zu Fehlern kommt. Wenn man z.B. direkt vor der Haustür steht und dann nach links runter wieder zur Wiese geht dann werden plötzlich die Grass-Schrittgeräusche sofort abgespielt obwohl der Char noch ganz oben vor der Tür auf dem Beton steht. Vielleicht ein Problem der Koordinaten, mal schauen ob das in den Griff zu bekommen ist.
« Letzte Änderung: 15. Februar 2015, 11:35:32 von Kiwa »
Das Leben ist ein Adventure. Aber ohne Komplettlösung.

Für fast alles gibt es eine logische Erklärung. Für alles andere ein Placebo.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Schrittgeräusche ändern
« Antwort #4 am: 09. März 2015, 00:13:52 »
Du bist ja echt ein Scherzbold. Du "brauchst" also stepOn und stepOff "im Prinzip nicht", aber baust dann wiederum eine Variable ein, die exakt den selben Effekt hat... ok, na gut.
Meine Variante wäre gewesen, einfach in der stepOn-Funktion die Schrittgeräusche zu ändern. (Außerdem kann mein Code allgemein verwendet werden, und dieser Thread ist ja vielleicht nochmal für jemand Anderes nützlich.)

Mit GetAtRoomXY hast Du völlig recht, bei Region* machen Screen-Koordinaten wenig Sinn (und sind eh nicht direkt verfügbar, richtig).

Bzgl. "meiner" Idee, die aber einen "Hacken" (sic) hat: nirgends sprach ich davon, die Schrittgeräusche per player.ChangeView() zu ändern; man muss vielmehr per GetViewFrame() direkt den Sound der einzelnen Frames ändern. Ich hatte dafür im AGS-Forum sogar mal eine Funktion geschrieben, aber das kann man ja relativ leicht selbst machen. Einfach per while die frames der vier loops durchgehen, Sound checken und ggf. ändern.
« Letzte Änderung: 09. März 2015, 00:14:43 von KhrisMUC »