Beiträge anzeigen

Diese Sektion erlaubt es ihnen alle Beiträge dieses Mitglieds zu sehen. Beachten sie, dass sie nur solche Beiträge sehen können, zu denen sie auch Zugriffsrechte haben.


Nachrichten - Cone Arex

Seiten: [1] 2 3 ... 156
1
Zitat
Das, was Cone Arex sagt, ist mir auch in neueren Starterpacks über den Weg gelaufen
Eigentlich sollte das in neueren SPs nicht vorhanden sein. Wenn du aber Starterpacks für 2.7.2 meinst: Die liefen auch noch mit der alten 2.6.2-Codebasis. Ist ein bisschen komplizierter. (Der Wechsel zur objektorientierten Scriptsprache erfolgte mit 2.7, nicht mit 3.0.)

Zitat
aber wenn es unvollständig ist, weiß man natürlich nicht, wo man ansetzen soll.
Da habe ich mich geirrt bzw. falsch ausgedrückt. Der Code fürs Jagen selbst ist vollständig. Nur fehlen die Reaktionen, das Stecken ins Verließ etc.

Und weil ich dummer Vollidiot bin, der nicht weiß was gut für ihn ist, habe ich das alte Hunting-Script mal für AGS 3.6.0 angepasst, mit weiteren Informationen versehen und außerdem Beispielreaktionen implementiert. Statt einfach mal früher pennen zu gehen.
Hunting-Script
Implementation mit Beispielen im Maniacweed-Starterpack (*Werbetrommel rühr*)

In dem Beispiel kann man von Edna (Flur unten), Ed (Kellerraum 1) und Britney (Schlafzimmer) verfolgt werden. Verfolgung über mehrere Räume hinweg wird nicht unterstützt (war in MMD soweit ich weiß auch der Fall). Allgemein finde ich die Umsetzung suboptimal.

2
In den alten Starterpacks mit AGS 2.62-Codebasis gab es. soweit ich weiß unvollständige, Reste des entsprechenden Codes für das Jagen aus Maniac Mansion Deluxe:

GlobalScript:
// ============================= hunter ===========================================
// this section after cutscene functions
int hunter_char = NO_CHAR;
// two-dimeanional hunting
#define STEPS_UNTIL_DIR 10
int steps = STEPS_UNTIL_DIR;
int lastx = -1;
int lasty = -1;
// give player time to act
#define COUNTDOWN_OFF -1
#define COUNTDOWN_START 400
#define COUNTDOWN_STOPPED -2
int countdown = COUNTDOWN_OFF;
int hunter_area = -1;

function StartHunting (int hunter){
  hunter_char = hunter;
  lastx = -1;
  lasty = -1;
  countdown = COUNTDOWN_OFF;
  // switch player disabled
  // avo- SetGlobalInt (291, 1); // avo veraltet
}

function StartCountdown (){
  // give player some time to think and react
  // but player can't move
  SetGlobalInt (2, 0);
  hunter_area = GetWalkableAreaAt (character [GetPlayerCharacter ()].x - GetViewportX (), character [GetPlayerCharacter ()].y - GetViewportY ());
  RemoveWalkableArea (hunter_area);
  countdown = COUNTDOWN_START;
}

function StopHunting (){
  hunter_char = NO_CHAR;
  // player may move
  if (hunter_area >= 0)
  {
    RestoreWalkableArea (hunter_area);
    hunter_area = -1;
  }
  SetGlobalInt (2, 1);
  // switch player enabled
  // avo- SetGlobalInt (291, 0); // avo veraltet
}

function IsHunting (){
  int result = hunter_char != NO_CHAR;
  if (result)
  {
    // stop hunting when chars are in different rooms
    if (character [hunter_char].room != character [GetPlayerCharacter ()].room)
    {
      StopHunting ();
      result = hunter_char != NO_CHAR;
    }
  }
  return result;
}

function HunterSucceeded (){
  int hunter = hunter_char;
}

function TimeToActIsOver (){
  int hunter = hunter_char;
}

function DoHunting (){
  int caught = 0;
  int charid = GetPlayerCharacter ();
  int px = character [charid].x;
  int py = character [charid].y;
  // check distance
  int dx = px - character [hunter_char].x;
  int dy = py - character [hunter_char].y;
  if ((dx * dx + dy * dy) <= 500)
  {
    caught = 1;
    HunterSucceeded ();
  }
  else if (steps <= 0)
  {
    if ((px != lastx) || (py != lasty))
    {
      // correct HUNTER's direction
      MoveCharacter (hunter_char, px, py);
      lastx = px;
      lasty = py;
    }
    steps = STEPS_UNTIL_DIR;
  }
  else steps--;
  return caught;
}

function RepExec_Hunting (){
  int caught = 0;
  if (IsHunting ())
  {
    if (countdown == COUNTDOWN_OFF) caught = DoHunting ();
    else if (countdown == 0)
    {
      countdown = COUNTDOWN_OFF;
      TimeToActIsOver ();
    }
    else if (countdown > 0) countdown--;
  }
  return caught;
}

GlobalHeader:
#define NO_CHAR -1

// --- hunting ---
import function StartHunting (int hunter);
import function StopHunting ();

Du musst mal schauen, ob du das brauchen und eventuell auf die aktuelle Scriptsprache umbauen kannst.

3
Specials / Re: Maniac Mansion Mania Ronmastered Collection
« am: 09. April 2025, 21:21:02 »
Ich hab mir mal den aktuellen Source-Code geholt und ScummVM mal selbstkompiliert. (Die Daily Builds für Debian wollen bei mir wegen irgendwelchen Libraries nicht.)

Stand heute: Der Fehler mit der Schrift ist noch vorhanden. Ich denke, dass wird ein Problem mit ScummVM  bzw. dessen Font Renderer sein, wie Cmdr bereits geschrieben hat. Wir hatten ja schon in der Vergangenheit damit Probleme.  (Siehe den Wiki-Artikel, den ich mal aktualisieren sollte.) In der internen Datenbank ist das Spiel nun als "Maniac Mansion Mania Ronmastered Collection (Ep. 1-9) (German)" gelistet. Interessanterweise gibt es noch ein weiteres Problem: Die Sprachausgabe wird nicht geladen. Bei Episode 41 dagegen funktioniert die Sprachausgabe.

4
Specials / Re: Maniac Mansion Mania Ronmastered Collection
« am: 08. April 2025, 20:21:34 »
Könnte die Person dazu Screenshots anfertigen? Beziehungsweise, ich könnte selbst mal es mir selbst mal in ScummVM ansehen. Es ist nämlich so, dass immer noch Probleme mit der Schrift bzw. dessen schwarzen Outline bestehen. Aus irgendeinem Grund wird bei einigen Buchstaben die unterste Pixelreihe der Outline abgeschnitten. Auch wenn man das Spiel ganz normal mit der integrierten Engine ausführt. Bei dem Eszett (ß) habe ich das korrigiert und die Schrift ist auch im Maniacweed-Template eingebunden. Bei der Ronmastered Collection wird ebenfalls die korrigierte Font benutzt. Ich weiß aber inzwischen, dass das Problem noch bei anderen Buchstaben wie dem kleinen p besteht. Da ist es mir nicht gelungen, es zu ändern. Das wäre also kein Fehler von ScummVM.

5
Ich denke der obere Balken stört nicht. Wie sieht es aus, wenn einige geeignete Räume erweitert werden und andere den Balekn behalten?
Noch schlechter. Ich würde alle Räume entsprechend erweitern. Ich lade demnächst mal ein paar Vergleichsbilder hoch.

Zitat
Wände und Boden der Gummizelle sehen mir zu sehr nach Kacheln und Fliesen aus, nicht nach Polstern.
Genau das habe ich befürchtet. Ich schau mal, dass ich da nochmal rangehe.

Die Screenshots:
Spoiler (hover to show)

6
Ressourcen / Re: Maniacweed-Template (Tumbleweed)
« am: 03. April 2025, 20:27:56 »
Einige wissen es bereits: In den vergangenen Monaten wurde an dem Maniacweed-Template gearbeitet, unter anderem von mir und Larry Wolf. Inzwischen dürfte alles aus dem Bernard-Starterpack integriert sein, plus diverse Verbesserungen am Bernoulli-Haus und dem Tumbleweed-Unterbau. Deswegen geht das Ganze jetzt in die öffentliche Beta-Phase. Die Links aus dem Eingangspost sind weiterhin aktuell:

Repo: https://gitlab.com/ronville_townsquare/maniacweed
Direktlink: https://gitlab.com/ronville_townsquare/maniacweed/-/archive/master/maniacweed-master.zip

Neben Fehlern sind auch Verbesserungsvorschläge und Wünsche willkommen.

7
Schon zwei Tage überfällig. Wird Zeit das ich das auflöse.

Nein, das war kein Aprilscherz. Mit "nähert sich der Fertigstellung" habe ich vielleicht übertrieben, der Rest ist vollkommen echt.

Beeindruckend, was du da geleistet hast!
Danke. Bin selbst erstaunt, das eine solche Mammutaufgabe geleistet habe. Mich schreckt sowas normalerweise zurück.

Und danke für die aufmunternden Worte. Ich bin was meine Arbeit anbelangt wohl einfach zu selbstkritisch geworden.

Zitat
Meine Meinung wäre, es bei 4:3 zu belassen. Wenn ich das richtig sehe, wäre der Aufwand enorm und steigert den Spielspaß nur marginal. Auch auf die Farbverläufe würde ich verzichten.
Genauso sehe ich das auch. Momentan überlege ich noch, ob ich einige Ideen und Grafiken wie Britney im Nachthemd aus den Remake-Versuchen integriere.

8
*Staub wegpust*
2019...sechs Jahre ist dieser Versuch jetzt schon her? Gott, dass ist doch eine einzige Peinlichkeit.

Ich habe in den vergangenen Jahren immer mal wieder dem Projekt herumgedoktert, welches ich zwischenzeitlich als Hamstermann-Britnard-Epos bezeichnet habe. Aber wie man sehen kann, bin ich damit auf keinen grünen Zweig gekommen. Ende letzten Jahres habe ich dann entschlossen, den bisherigen Plan ad acta zulegen und alles auf den Kopf zu stellen. Die veröffentlichte Version ist schlicht in einem zu schlechten Zustand, als das sie weiter so bleiben kann. Und mit der neuen Version vor ein paar Jahren habe ich zusätzlich noch den Britney-Lösungsweg zerschossen. I am very smart. Jedenfalls dachte ich mir: Ich entwickle schlicht zwei Versionen: Ein Remake, dass auf Basis der Kernidee ein im Grunde neues Spiel wird. Und ein Remaster, welches sich am Original orientiert und nur wenig Änderungen erfährt. Vor allem aber sollte das Remaster nicht auf Basis eines Starterpacks neu gebaut werden, sondern auf dem Original-Quellcode basieren. Auf die Weise nehme ich mir den Druck bezüglich des Remakes und schaffe gleichzeitig die Peinlichkeit des Original-Hamstermann aus der Welt.

Etwa Ende September habe ich damit angefangen. Also erstmal das Originalspiel schrittweise zu AGS 3.6.0 hochkompiliert und dann angefangen, Fehler zu korrigieren. Tja und dann sind die Pferde mit mir durchgegangen. Erst wollte ich den Großteil des alten Codes wie die Raumfunktion so belassen. Aber dann führte eines zum anderen. Ich schreibe neuen Code, restrukturiere den alten. Gebe Objekten, Hotspots etc. ordentliche Bezeichner (ich verwendete damals das typische ObjectOn(Nr) statt Bezeichnern). Fange an die GlobalInts alle zu notieren und gleichzeitig einige davon durch richtige Variablen zu ersetzen. Die alten AGS-2-Raumfunktionen wie room_a() weichen den aktuellen wie room_Load(). Alle prä-2.7-Befehle wie DisplaySpeech(), ObjectOn() werden ausgemerzt. Räume werden neu organisiert, die alten Views, Items etc. Karteileichen werden gelöscht. Und so weiter und so fort. Zwei Wochen später hatte ich im Prinzip das Spiel neugeschrieben. Und das ist keine Übertreibung. Abgesehen von einigen Wait()-Aufrufen habe ich jede Zeile Code neugeschrieben. Ich habe sogar alle GUIs und den dazugehörigen Code im GlobalScript gelöscht und stattdessen den Code aus den AGS-3-Starterpacks integriert. Von Prä-2.7-Code ist nichts übrig. Ich habe die Unterstützung für den Code auch in den Einstellungen abgeschaltet. Und weils so toll war, habe ich das gleiche auch für das Audio-System gemacht. Unterstützung für PlaySound() und PlayMusic() ist abgeschaltet. Oh und die GlobalInts habe ich gleich mitentsorgt. Der Müll wird im Code nicht mehr verwendet.
Tja und danach gings gleich weiter damit, den restlichen Müll zu refactoren. Damals habe ich das Konzept von View und Characters nicht verstanden, deswegen kommen gab es Charaktere mehrfach. Den Hamstermann gab es zwei mal cSecret, der im Wohnzimmer steht. Sowie cGeheim, welcher im Intro und Outro rumläuft. Bernard gab es drei mal: cBernard für die Traumwelt, cBern für die Realität und cBernar für das Intro. (Warum? Warum war ich so dumm?) Ed gab es auch drei mal: Die C64-Version im Intro, die normale in MMD-Grafik und nochmal in EGA-Grafik. Weil ich das Ändern der Views damals nicht geschnallt habe. Der Reihe nach wurden die überflüssigen Versionen entsorgt und der Code angepasst. Und wie man mich inzwischen kennt: Nachdem das Spiel technisch schon generalüberholt wurde, ging es an die Grafik: Ich füge Animationen ein und ersetze geschützte Grafiken wie die aus Dott. Und weil man ich immer noch nicht zufrieden bin, fing ich an doch noch ein wenig am Rätseldesign zu arbeiten. Wenn bislang auch nur geringfügig. Überarbeitet wurden dann auch noch die Dialoge. Wobei ich dann erneut merke, dass dies nicht meine Stärke ist. Ich habe definitiv Probleme Dialoge zu schreiben, welche nicht in Eigenverarsche oder Popkultur-Referenzen ausarten. Wobei ich auf den neuen Dialog mit Grün doch ein bisschen stolz bin.

Momentan nähert sich das Remaster vom Hamstermann seiner Fertigstellung. Ich bin über manche Dinge noch entschieden. Etwa was die Grafik anbelangt. Aktuell ist das Spiel noch in der alten 4:3-Auflösung gehalten und verwendet die schlichten Hintergründe ohne Farbverläufe. Bislang möchte ich das so lassen. Den schwarzen Balken am oberen Rand wollte ich wegmachen und die Hintergründe entsprechend auffüllen. Ich finde aber, dass die Hintergründe damit seltsam bis einfach falsch wirken. Wie seht ihr das?


Shalom.


Wer erkennt die Referenz?


Welche Art von Filmen wohl?


Wer erkennt die Referenz?


Joa.

9
Specials / Re: Maniac Mansion Mania Ronmastered Collection
« am: 08. März 2025, 16:48:18 »
Bei Episode 3 wurde etwas am Rätseldesign geschraubt, der Rest müsste gleich sein.

Kleiner Hinweis, weil es mich selbst irritiert hat:
Spoiler (hover to show)

10
Specials / Re: Maniac Mansion Mania Ronmastered Collection
« am: 07. März 2025, 22:31:33 »
Vielen Dank für dieses Werk. Es hat Spaß gemacht, die alten Spiele nochmal zu spielen.
Ich finde, dass Episode 3 am stärksten von der Überarbeitung profitiert hat.

Und danke, dass ich mich an er Entwicklung beteilligen durfte. Das Erstellen komplexer Animation war eine definitiv lehrreiche Erfahrung.

20 Jahre...wir sind jetzt zeitlich weiter von der Veröffentlichung von Episode 1 entfernt, als zu der Veröffentlichung von Maniac Mansion zum Zeitpunkt von Episode 1.

11
Ich muss noch einwerfen, dass ein paar Sprites von Annies Büro aus der FM Towns Version von Zak McKracken and the Alien Mindbenders in der Bibliothek der Bernoullis eingebaut sein könnten.

Und vermutlich auch aus der VGA-Version von Indiana Jones and the Last Crusade, wenn man in der Bibliothek in Venedig ist.
Als jemand, der damals viel mit diesen Bibliotheks- bzw. Grafiken experimentiert hat, kann ich dir versichern das keine Grafiken von Annie oder der Venedig-Bibliothek in der Bernoulli-Bibliothek vorhanden ist.

12
Trash Episoden / Re: Britney muss mahl
« am: 01. März 2025, 19:51:10 »
Ich bewundere dich dafür, dass du dir Spiel heutzutage noch gegeben hast. Ich hatte es selbst seit Jahren nicht mehr gesehen. Inzwischen frage ich mich, was mich damals bei der Entwicklung geritten hat...
Ich finds ja uklig, dass so ziemlich jedes einfache Wort falsch geschrieben ist, aber kompliziertere wie installiert oder urinieren dagegen sind richtig geschrieben. Ich weiß gar nicht mehr, ob das Absicht war. Der Fehler mit dem Kissen, der einem den Edding wieder ins Inventory bringt hat bei mir jedenfalls deutlichen Schnaufer und nostalgische Gefühle an die damalige Zeit ausgelöst. Danke dafür.

13
News / Re: Frohe Weihnachten
« am: 25. Dezember 2024, 00:01:22 »
Frohe Weihnachten euch allen. Lasst euch beschenken und drückt eure Großeltern, wenn ihr noch welche habt. Es geht manchmal schneller als man denkt.

14
Zitat
Am ehesten könnte ich mir vorstellen, dass das GUI an anderer Stelle wieder eingeschaltet wird.
Dies.
Genauer wird es in der repeatedly_execute() im CustomDialogGui.asc wieder eingeschaltet:
function repeatedly_execute()
{
  if (CDG_options.reset_scrollstate) {
    if (CDG_options.dialog_options_upwards) CDG_options.scroll_from =0;
    else CDG_options.scroll_from = 1;
  }
  if (in_speech == true) {
    in_speech = false;
    if (CDG_options.hide_gui_while_dialog == true && gMain.Visible == false && gAction.Visible == false) {
      gMain.Visible = true;
      gAction.Visible = true;
    }
  }
}
Ohne trifftigen Grund bitte nicht an dem Script rumfummeln!

Das Template bietet bereits die Option, das automatische ein- und ausschalten des GUIs bei den Dialogen abzustellen. In TemplateSettings.asc die Zeile
CustomDialogGui.DialogGuiOptions[eDialogGui_hide_gui_while_dialog]   = true;  suchen und auf false ändern. Daraus folgt natürlich, das man nun als Entwickler selbst dafür sorgen muss, das Interface für die Dialoge abzustellen.

Was den Mauszeiger angeht: Der wird auch irgendwo wieder zurückgesetzt. Wo genau habe ich nicht rausfinden können. Eine schmutzigen Workaround habe ich dafür: Deklarier eine Globale Variable vom Typ bool im GlobalScript oder vorzugsweise in einem eigenen Script (welches in der Rangfolge über dem GlobalScript stehen muss):
bool DialogCherylFinished;
export DialogCherylFinished;
Im Script Header dann:
import bool DialogCherylFinished;damit die Variable überall sichtbar ist. Im Dialogscript setzt du die Variable dann auf true sobald der Dialog beendet werden soll. Im Raum selbst prüfst du dann in der Repeated_Execute-Funktion auf diese Variable, setzt deinen Code in den Block und setzt anschließend die Variable wieder auf false:

function room_RepExec()
{
  if (DialogCherylFinished)
  {
    mouse.UseModeGraphic(eModePC);
    mouse.ChangeModeHotspot(eModeWalkto, 0, 0);
    DialogCherylFinished = false;
  }
}
Dieser Codeblock wird dann erst nach dem Abschalten des Dialogs ausgeführt. Heißt: Der Dialog setzt erst den Mouse Cursor zurück und anschließend setzt du den Cursor wieder auf deine Grafik. Das kann den Effekt haben, dass für einen Moment der Cursor die Standardgrafik hat ehe er wieder deine Customgrafik hat. Von daher ist das auch nicht die Ideallösung.

15
Zitat
Ja, ihr Name ist ziemlich unoriginell und klischeehaft. Es kommt noch hinzu, dass sie, laut meiner Vorlage, einen amerikanischen Vater und eine japanische Mutter hat, um das Ganze noch klischeehafter zu machen, hust. :D
Ach, ich finde das gar nicht schlimm. Ist ja nicht so, als wenn wir nicht schon seit 19 Jahren mit Klischees und Tropes aus US-Serien arbeiten. Ich hatte übrigens damals, 2007 oder so, mit Sakura aka "Britney mit weißen Haaren" einen Charakter mit fast identischer Hintergrundgeschichte und Charakterisierung gehabt. Kam bis auf den einen Comic kam die Figur aber nie zum Einsatz und verschwand auch aus dem Starterpack.

Zitat
Mit AGS 3.6 (ich glaube, das war ein Bernard-Starterpack) wurde die Hotspot-Namen auch beim hovern mit der Maus am Mauszeiger angezeigt.
Das ist das Maniacweed-Template, ein Neubau des Bernard-Templates auf Basis von Tumbleweed, an dem aktuell gearbeitet wird: https://www.maniac-mansion-mania.de/forum/index.php?topic=2781.0

Seiten: [1] 2 3 ... 156