Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Newbies => Thema gestartet von: NsMn am 02. März 2008, 07:14:20
-
Hallo,ich dachte ich mache für mich einen Fragenthraed auf.Frage 1:Ich habe ein Problem.Wenn ich bei AGS etwas bei"Use Inventory on Hotspot" reinschreib,passiert im Spiel das auch,aber danach sagt der Charakter"Besser nicht".Wie lässt sich das vermeiden?Gibt es einen Befehl,den man bei "Any Click on..." reinschreiben kann?
-
Ich glaube da ist ein "unhandeled" zu viel. Schreib hier man den Script für deses Event hin. Vllt weiß ich dann mehr, ich kann aber nicht dafür garantieren.
-
Man sollte eigentlich nur unter "Any click on hotspot" scripten um Fehler jedweder Art zu vermeiden. ;)
Ein Script könnte zum Beispiel so aussehen:
if (UsedAction (A_USE_INV)) {
if(player.activeinv==11) {
player.Say("Ja, so machen wir das.");
Wait (5);
LoseInventory(11);
PlaySound(4);
AddInventory(22);
}
}
Dürfte eigentlich soweit korrekt sein. Fröhliches scripten! ;D
-
Danke,aber ich habs schon vorher herausgefunden*schäm* :-[
-
So,schreib mal wieder in meinen Hilfe Thread.
Wie macht man im Verbengui neue Verben?Ich habe ein neues Gui gemacht und zu den ursprünglichen die Verben"schliess auf" "schalt ein"und schalt aus.Was muss ich tun,das die genauso funktionieren wie die anderen?Und das Inventory und die Pfeile auch?
-
Mit den GUIs kenne ich mich nicht wirklich gut aus, möchte dir aber raten keine neuen (bzw. alten) Verben hinzu zu fügen. Es hatte schon seine Gründe, warum man bei LA die Verbenliste immer mehr augedünnt hat und oftmals brauchen wir drücke / ziehe / und gib bei MMM gar nicht.
Und: Mehr Verben bedeutet auch mehr Arbeit beim Scripten. :-\ 8)
-
Genau, das ist ja "Benutze Schlüssel mit" und "Benutze".
Zusätzliche Verben hinzuzufügen ist schon möglich, allerdings solltest Du Dich ins global script des Starterpacks einarbeiten. Es ist einiges zu beachten, zu viel, um es mal schnell in einen Beitrag zu schreiben.
Auf jeden Fall wäre es wohl am einfachsten, diese Verben zusätzlich zu "Ziehe" und "Drücke" auf Cursor mode 8 zu legen.
-
So,ihr werdet wieder mit Fragen überhäuft!!
1.Wie kriege ich so ein Auswahl-Dingsda wie in Wendys Haus hin?(Also beim Fahrstuhl das so aussieht wie ein Dialog)
2.Gibt es Dialog-externe Befehle,die bei einem Dialog eine Option ein-/auschalten?
-
1. Ich glaube das ist eigendlich auch ein Dialog, der den Aufzug in eine Andere Etage fahren lässt. Frage mich jetzt aber nicht nach deem Code dafür.
-
2.
http://new.bigbluecup.com/manual/Dialog.SetOptionState.htm
-
Gut.Problem3:Wenn ich eine Tür mache und der Player geht dadurch,ist die Tür im neuen Raum noch zu.woran liegt das? ???
-
Hast du beim Türenobjekt der betroffenen Tür ein Häkchen bei "object is initially visible" gemacht?
-
nein,aber das gehört doch so,oder?
-
Wenn du willst, dass die Tür, wenn du hineinkommst, offen ist, sollte das "Tür-offen"-Objekt sichtbar sein.
Also: setze das Häkchen, dann müsste es klappen.
-
Gibt es irgendwo eine spielbare MM-Demo?(erlaubt und kostenlos wär natürlich am Besten)Oder zumindest die Original-Version nur für mehrere Computersysteme?(Ist das nicht Abandonware)
-
Maniac Mansion Deluxe ist ein 1:1 Remake des original MMs, nur mit verbesserten Grafiken. Das kannst du frei auf der MMM-Homepage herunterladen.
Oder legst du wert auf EGA-Grafiken?
-
Nein,Ich mag MMD nicht,weil da nette Eastereggs und das Original-16-BefehlGui fehlt :'(
-
Eine spielbare Demo gab es (soviel ich weiß) nie, nur eine selbstlaufende.
Das original MM gibt's nicht als Freeware. So "nett" ist LucasArts leider nicht... :P
Hast du Dott? Da isses mit drin. :-\
Auf "youtube" findest du auch einige Ingame-Videos von MM.
-
Aha.Nächste Frage(passt aber hier eigentlich nicht hin):Gibt es auch Engines wie AGS für andere Genres?
-
Sicherlich.
Nur kenne ich keine, die so gut wie AGS und völlig kostenfrei sind. :-\
Hier gibt's was für Jump-n-Run:
http://www.clickteam.com/eng/tgf2.php
Für Rollenspiele soll der RPG-Maker 2000 sehr gut sein:
http://rpg2000.4players.de/
Der ist leider auch nicht mehr umsonst zu haben. :P
-
Schade.Nächstes ;D
Bei "Maniac Mansion the new Saga"(Rubacant benutzt doch AGS,oder?)habe ich gesehen,das man da eigene Sachen eingeben konnte,die der Character bei einem Dialog sagt.Ist sowas schwierig zu bewerkstelligen?
-
hä?!?
was meinst du mit "eigene sachen eingeben"?
eine texteingabe zur spielzeit, oder wie? ???
-
Er meint Dialogtexte eingeben. Natürlich wäre das möglich, man kann ja auch Passwörter per Texteingabe einbauen. Allerdings wäre das bei Dialogen sicher etwas schwieriger.
-
Und wie geht das bei Passwörtern?
-
Ich kenns nur mit folgendem Skript, dabei würde sich dann so eine Eingabe-Box öffnen:
string eingabe;
InputBox("Passwort:",eingabe);
if(!StrCaseComp("Ednamausi",eingabe)) {
SetGlobalInt(118, 1);
// beliebige Aktion hier einsetzen
}
else {
// beliebige Aktion hier einsetzen
}
In diesem Fall ist Ednamausi das richtige Passwort. Das klappt soweit ich weiß aber net mit mehreren Eingabgemöglichkeiten, d.h. nach diesem Skript würde jede andere Eingabe zu ein- und derselben Aktion führen.
-
Das geht schon mit anderen Passwörtern,man muss nur ein anderes GI verwenden.
-
Hier noch das Script:
string eingabe;
InputBox("Passwort:",eingabe);
if(!StrCaseComp("Ednamausi",eingabe)) {
SetGlobalInt(118, 1);
player.Say("Richtig.");
}
if(!StrCaseComp("Kaktus",eingabe)) {
SetGlobalInt(119, 1);
player.Say("Ein anderes Passwort.");
}
else {
player.Say("Falsch.");
}
-
string eingabe;
InputBox("Passwort:",eingabe);
if(!StrCaseComp("Ednamausi",eingabe)) {
SetGlobalInt(118, 1);
player.Say("Richtig.");
}
if(!StrCaseComp("Ednamausi",eingabe)) {
SetGlobalInt(119, 1);
player.Say("Ein anderes Passwort.");
}
else {
player.Say("Falsch.");
}
Wieso sind die fettmarkierten Zeilen gleich? Ist das so beabsichtigt? Wenn ja, würde eine Schleife doch reichen.
-
Jetzt müsste es stimmen ;)
-
Bei Passwörtern oder allgemein, wo nur eine Lösungsform in Frage käme, ist so ein Input durchaus praktisch. Bei Dialogen würde ich dazu nicht unbedingt raten, vor allen Dingen weiss der Spieler dann ja nicht, was er alles eingeben soll und zudem musst Du dann auch sämtliche Möglichkeiten von Dialogeingaben einzeln programmieren...also quasi fast bis ins unendliche.
Was den RPG-Maker anbetrifft hatte ich den vor einiger Zeit auch noch auf meiner Platte gehabt. Allerdings knüpft der Stil schon sehr stark an alte Zelda-Spiele an und für die Gestaltung sind die Möglichkeiten eher begrenzt. Also für echte Rollenspieler ist dies nicht unbedingt der Brüller. Da würd ich eher Neverwinter Nights empfehlen (was allerdings auch erst käuflich zu erwerben ist), da es auch auf einem modernen Rollenspiel basiert und zudem kommt natürlich auch das D&D-Regelsystem zum tragen.
Optimal fänd ich noch so einen RPG-Maker, der von der Bedienoberfläche AGS ähnelt, womit sich zudem auch noch ein eigenes System programmieren lässt. Wär Ideal. Wer weiss, vielleicht kommt sowas ja noch. Wenn ich mich besser mit Programmiersprachen auskennen würde, würd ich mich evtl. sogar selbst daran setzen. Aber allenfalls kenn ich nur ein paar Java-Befehle, ein bisschen CSS und noch die letzten Bruchstücke vom C64-Basic! ;D
Greetz,
der Volltanker
-
@Volltankinator: Ich kann auch etwas Basic. Vllt mach ich mal ein Quiz dazu.
-
g
-
Ok,gut.Vielleicht kaufe ich mir mal ein C++-Lernpaket.
Edit:Hey,ich hab herausgefunden wie man in die Starterpacks neue Steuerverben-GUIs erstellt!Meint ihr,dass das einem toturial würdig ist?
-
Ich habe ein neues problem:
Ich möchte in einem Dialog eine Option erst später einschalten.also habe ich das häkchen bei "Show"entfernt und habe dann im Script "option on" geschrieben.aber die Option wird nicht eingeschalten!Woran liegt das?
-
Hast du auch den richtigen Befehl genutzt? Also "option-on 2" im Dialog-Script oder "dialog[4].SetOptionState(2, eOptionOn);" im normalen Script?
Wenn ja, dann könnte es sein, dass du die Option vorher für immer ausgeschaltet hast. Z.B. mit "option-off forever".
Anders kann ich mir das nicht erklären. :P
-
Wo ich gerade den thread nochmal durchlese:
Rubacant benutzt "show the text parser with this topic's options".
In der Dialogauswahl ist dann ganz unten ein Eingabefeld, dessen Inhalt über dialog_request und Said() abgefragt werden kann.
-
Gut,danke.Könnte man vielleicht als easteregg einbauen.
Nächstes:Gibt es ein modul,PlugIn oder ein paar spezifische Befehle für "Action"-szenen?
ich möchte ein paar Action-Szenen wie Kämpfe oder Jahrmarktspiele(wie in Indy oder SaM)in die epi reinbasteln.
-
Soweit ich weiß gibt es tatsächlich ein Modul für Indy-Kämpfe, da müsstest Du mal im AGS-Forum suchen.
"Spezifische Befehle" gibt es nicht, das berühmte Whack-A-Rat z.B. lässt sich relativ einfach mit Timern, Random und on_mouse_click realisieren; auch bei Minigames wird nur mit Wasser gekocht.
-
"Spezifische Befehle" gibt es nicht, das berühmte Whack-A-Rat z.B. lässt sich relativ einfach mit Timern, Random und on_mouse_click realisieren; auch bei Minigames wird nur mit Wasser gekocht.
Kannst du mir da mal ein beispiel angeben?
-
Joa, äh
int rat;
function repeatedly_execute() {
if (IsTimerExpired(1)) {
if (object[rat].Frame==6) {
object[rat].Animate(...); // zurück ins Loch
rat=Random(8);
SetTimer(1, Random(3)*40+40);
}
else {
object[rat].Animate(...); // raus ausm Loch
SetTimer(1, Random(3)*40+40);
}
}
}
int score;
function on_mouse_click(mouseButton button) {
if (button==eMouseLeft) {
int x=mouse.x/70;
int y=mouse.y/70;
oHammer.SetPosition(x,y);
oHammer.Animate(...);
if (x*3+y == rat) {
object[rat].Animate(...);
score+=10;
}
}
}
GANZ grob.
-
Wenn ich SetPlayer oder SetasPlayer benutze,wechselt der aktuelle Char zu dem Raum,in dem sich der andere befindet,statt zum NPC zu werden.Wie kann man das reparieren?
-
Gute Frage... Wie hast Du es denn kaputtgemacht?
-
Ach,jetzt weiß ich es.Ich habe es in eine Bedingung gesteckt,in der der Character,der sowieso der Spieler ist,abgefragt wird(also ob er der Spieler ist,das habe ich für eine Char-Switch-Funktion gebraucht)Hat sich erledigt.
Bloß das mit dem Inventory-an-anderen-geben,also das der andere es im Inventar hat,hätte ich gern nochmal erklärt...
-
So,hätt dann mal wieder ne Frage-ist es möglich,die Momentane Richtung,in die der Player schaut(also was mit FaceDirection gesetzt wird)abzufragen bzw. in einer Variablen zu speichern?
-
player.Loop
0 = down
1 = left
2 = right
3 = up
-
Supi!Danke!
-
Aber da wäre noch was:Ich würde gerne,wenn man ein Item benutzt,den Cursor ändern.Ich hab schon jede menge probiert,bin aber daran gescheitert,dass es bei Items kein "Any Click on Inventory Item" gibt.
-
Ändere mal den Cursor Nr. 4 (Use inv). Das sollte reichen.
-
Er sollja entsprechend bei jedem Item geändert werden.
-
Bei jedem Item ein anderer Cursor? Welchen Sinn macht das?
Wenn du nur möchtest dass der Cursor zu der Grafik vom Inventar Item wechselt dann solltest du dir mal die Funktion "Use Inventory Graphics as Cursur" (o.ä.) in den Haupteinstellungen im AGS angucken.
Mfg
LilaQ
-
er soll aber nicht die invetnory-grafik benutzen,sondern eine andere.
-
Dann wirst du es per
mouse.ChangeModeView(eModeUseinv, iViewID);
machen müssen.
Mfg
LilaQ
-
ABER WO?! ich sags nochmal:Das müsste ich bei einem Click auf ein Item machen,ABER:
Ich hab schon jede menge probiert,bin aber daran gescheitert,dass es bei Items kein "Any Click on Inventory Item" gibt.
-
Soll er den Cursor nur beim "Benutze" ändern?
Edit:
Such mal im GS nach "// use or give inventory item". Da würde ich es dann per
if (player.activeinv == 123) mouse.ChangeModeView(eModeUseinv, 321);
else if (player.activeinv == 124) mouse.ChangeModeView(eModeUseinv, 322);
...
mal probieren. *ungetestet*
Mfg
LilaQ
-
Was für Grafiken sollen denn als Cursor verwendet werden? Für jeden Inventargegenstand eine andere? Eine Miniaturversion mit Kreuz oder was?
Bissl mehr Info, dann können wir auch besser helfen.
-
Für jeden Inventargegenstand eine andere?
Genau,aber ich dachte,das hätte ich schon erwähnt.
-
Such Dir einen freien Bereich Spriteslotnummern, z.B. 801-840.
Dann änderst Du die Nummer von jedem Inventarspritecursor auf InventarItem-Nr. + 800.
In repeatedly_execute fügst Du ein:
InventoryItem*ii = player.ActiveInventory;
if (ii != null) mouse.ChangeModeGraphic(mouse.Mode, ii.ID+800);
-
Danke!Damit hast du mir gleich die Frage vorneweggenommen,wie man eine Abfrage mit "nicht gleich" macht!
PS:Ts,ts,"mouse"muss groß sein.Und so jemand nennt sich AGS-Spezialist ;)
-
Nein, "mouse" muss nicht groß sein. "Mouse" ist der Name der Klasse, "mouse" der Name der Instanz dieser Klasse, die auf den Mauszeiger verweist. Da es nur einen gibt, ist es aber tatsächlich in genau diesem einen Fall egal, ob man "Mouse" oder "mouse" benutzt. Trotzdem ist "mouse" korrekt und funktioniert deswegen auch.
Hast Du denn eine Fehlermeldung bekommen?