Autor Thema: Der Schraubertipps-Thread  (Gelesen 8983 mal)

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Der Schraubertipps-Thread
« Antwort #15 am: 01. Oktober 2010, 14:54:39 »
Ein Modul muss gar nicht sein, das würde ich nur der Aufgeräumtheit halber benutzen.

Im Grunde ist es sehr simpel:
In TranslateAction folgende Zeile einfügen (bei mir Zeile 138):

  objekt = OtherName(objekt);
Dann diese Funktion benutzen:

String OtherName(String objekt) {
  int r = player.Room;
  int mx = mouse.x;
  int my = mouse.y;
 
  int c = -1, h = -1, o = -1;
 
  int lt = GetLocationType(mx, my);
  if (lt == eLocationCharacter) {
    Character*cp = Character.GetAtScreenXY(mx, my);
    if (cp != null) c = cp.ID;
  }
  if (lt == eLocationHotspot) {
    Hotspot*hp = Hotspot.GetAtScreenXY(mx, my);
    if (hp.ID > 0) h = hp.ID;
  }
  if (lt == eLocationObject) {
    Object*op = Object.GetAtScreenXY(mx, my);
    if (op != null) o = op.ID;
  }
 
  // Raum 2
  if (r == 2) {
    if (h == 1 && books_wet) objekt = "nasse Bücher";
  }
 
  return objekt;
}

Im Beispiel habe ich einen alternativen Text für Hotspot 1 in Raum 2, falls books_wet == true.

(Der ganze Aufwand mit GetAtScreenXY ist übrigens nicht nötig, wenn die Gegenstände eindeutige Namen haben. Gibt es aber z.B. mehrere Spinde, von denen einer irgendwann "kaputter Spind" heißen soll, muss man natürlich zwischen IDs unterscheiden.

Wenn es aber z.B. im ganzen Spiel nur einen Rubin gibt, der später "Blutrubin" heißen soll, reicht:
  if (objekt == "Rubin" && ruby_is_bloody) return "Blutrubin";)

Auf die gleiche Weise kann man natürlich auch den Verbtext ändern.

Rocco

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2352
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: Der Schraubertipps-Thread
« Antwort #16 am: 01. Oktober 2010, 15:09:56 »
Danke, was ich vielleicht dazusagen hätte sollen ist, das ich da kein MMM-Starterpack verwende.  :-\
Bin deswegen auch gestern auf der Leitung gestanden was du mit TranslateAction meinst, weil ich so einen Befehl von AGS nicht kannte.
Werd mir das aber genau anschauen, vielleicht kann ich es extrahieren und trotzdem in mein Projekt einbauen.

PS: So ein generelles Modul wäre aber nicht verkehrt, das könnten sicher mehr Entwickler brauchen.
http://www.bigbluecup.com/yabb/index.php?topic=41245.msg545803#msg545803

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Der Schraubertipps-Thread
« Antwort #17 am: 01. Oktober 2010, 16:24:30 »
Achso, ich nehme an, Du verwendest ein label mit "@OVERHOTSPOT@"?
Das Prinzip ist dasselbe, Du legst den Text manuell fest und änderst ihn gegebenenfalls.

Wie gesagt, man kann das als Modul machen, aber es ist bisschen blöd, den alternativen Text in einer allgemeinen Form einzubauen.
Man muss ja irgendwie das Objekt/den Hotspot/etc. mit einer Variablen verknüpfen; das geht immer noch am leichtesten, wenn man es if-Zeilenweise in eine Funktion schreibt.

Rocco

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2352
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: Der Schraubertipps-Thread
« Antwort #18 am: 04. Oktober 2010, 10:41:13 »
Super danke, das Prinzip habe ich verstanden, damit weiss ich jetzt wie ich das einbauen kann.  ;D