Den angezeigten Text bei einer Aktion verändern

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
SeltsamMitHut
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 798
Registriert: 22.06.2004, 21:54
Wohnort: Arkham

Den angezeigten Text bei einer Aktion verändern

Beitrag von SeltsamMitHut »

Hab mal eine Frage, arbeite mit dem Maniac Mansion Mania GUI von LucasFan:
Möchte kurrzeitig einen Befehl ersetzen (z.B. "nimm" durch "kaufe" oder "gehe zu" durch "schleiche").
Wie kann ich einstellen, dass für eine kurze Phase des Spiels der im GUI angezeigte Text verädnert wird?
Der Button stellt nicht das Problem dar, der ist ausgebledet, ähnlich wie in MI1 in den hinteren Räumlichkeiten der Villa...
I was frozen today!
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Wenn das ganze blockend ist, diese Funktion ganz ans Ende des Global Scripts:

Code: Alles auswählen

function FakeLine(string befehl, string hot, string param, string obj) {
  string action;
  StrCopy(action, befehl);
  SetLabelColor(0, 0, ActionLabelColorNormal);
  if(StrGetCharAt(action, StrLen(action)-1) != ' ') StrCat(action, " ");
  SetLabelText(0, 0, action);
  Wait(30);
  if(StrComp(hot,"") != 0) {
    StrCat(action, hot);
    SetLabelText(0, 0, action);
    Wait(30);
  }
  if(StrComp(param,"") != 0) {
    if(StrGetCharAt(param, 0) != ' ') StrCat(action, " ");
    StrCat(action, param);
    SetLabelText(0, 0, action);
    Wait(30);
  }
  if(StrComp(obj,"") != 0) {
    if(StrGetCharAt(param, StrLen(param)-1) != ' ') StrCat(action, " ");
    StrCat(action, obj);
    SetLabelText(0, 0, action);
    Wait(30);
  }  
  SetLabelColor(0,0,ActionLabelColorHighlighted);
}
Diese Zeile irgendwo in den Global Header:

Code: Alles auswählen

import function FakeLine(string action, string hs, string param, string obj);
Und so sieht der Einsatz aus:

Code: Alles auswählen

FakeLine("Hypnotisiere", "Rhinozeros", "", "");
DisplaySpeech(BERNARD, "Du bist jetzt ein Pferd...");
FakeLine("Frage", "Informatiker", "nach", "QBasic");
DisplaySpeech(INFORMATIKER, "QBasic? Damit kenne ich mich nicht aus");
FakeLine("Gib", "Prospekt", "an", "Informatiker");
DisplaySpeech(WEBDESIGNER, "QBascic? Nee, das ha'm wir hier nicht");
Bild
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Benutzeravatar
SeltsamMitHut
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 798
Registriert: 22.06.2004, 21:54
Wohnort: Arkham

Beitrag von SeltsamMitHut »

Danke! Probier mal, obs auch damit geht, blockend soll es allerdings nicht sein. Ähnlich wie bei Zak, wo man auch "kaufe" im Laden statt "nimm" hatte. D.h. bei dieser Aktion soll dann der Text "nimm" einfach ausgetauscht werden. Die Änderung soll dann später auch wieder rückgängig gemacht werden...
vielleicht kann mans ja anzeigen, wenn die Maus über den jweiligen Hotspot kommt...
I was frozen today!
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Dann komm doch nicht gleich mit so einem Beispiel. Da gibt's ne andere Lösung. Such dir einen GlobalInt und dann verändere folgendes Script: (~Z.118)

Code: Alles auswählen

#define KAUFSTATTNIMM 100 // GlobalInt, die gesetzt ist, wenn die Befehle vertauscht sind

function TranslateAction (string result, int action, string objects, string item){
  // get translated action template
  if (action == A_WALK_TO)   StrCopy (result, "Gehe zu %s");
  else if (action == A_LOOK_AT)   StrCopy (result, "Schau an %s");
  else if (action == A_TALK_TO)   StrCopy (result, "Rede mit %s");
  else if (action == A_GIVE_TO)
  {
    if(GetGlobalInt(KAUFSTATTNIMM)) {
      if (StrLen (item) > 0)        StrCopy (result, "Verkaufe !s an %s");
      else                          StrCopy (result, "Verkaufe %s");
    }
    else {
      if (StrLen (item) > 0)        StrCopy (result, "Gib !s an %s");
      else                          StrCopy (result, "Gib %s");
    }
  }
  else if (action == A_PICK_UP) {
    if(GetGlobalInt(KAUFSTATTNIMM)) StrCopy(result, "Kaufe %s");
    else StrCopy (result, "Nimm %s");
  }

  else if (action == A_USE)
  {
    if (StrLen (item) > 0)        StrCopy (result, "Benutze !s mit %s");
    else                          StrCopy (result, "Benutze %s");
  }
  else if (action == A_OPEN)      StrCopy (result, "Öffne %s");
  else if (action == A_CLOSE)     StrCopy (result, "Schließe %s");
  else if (action == A_PUSH)      StrCopy (result, "Drücke %s");
  else if (action == A_PULL)      StrCopy (result, "Ziehe %s");
  else if (action == A_SWITCH_TO) StrCopy (result, "Wechsle zu %s");

  // fill object and item into action template
  StrCopy (result, GetTranslation (result));
  int ip = StrContains (result, "!s");
  if (ip >= 0)
  {
    int op = StrContains (result, "%s");
    StrSetCharAt (result, ip, '%');
    if (ip < op) StrFormat (result, result, item, objects);
    else         StrFormat (result, result, objects, item);
  }
  else           StrFormat (result, result, objects);
}
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Antworten