Autor Thema: In AGS Characters (zur Laufzeit) nachladen  (Gelesen 4206 mal)

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
In AGS Characters (zur Laufzeit) nachladen
« am: 27. Januar 2015, 00:03:32 »
Hallo Zusammen,

Folgendes Scenario:

Es soll die Möglichkeit geben das der Spieler das Spiel mit seinem selbt entworfenen Character spielen kann. Da ich als Entwickler aber die ganzen Characters nicht habe muss jeder Spieler (entweder vor dem starten des Spiels, oder direkt danach) seinen eigenen Character ins Spiel integrieren/hochladen können. Frage: Geht das? Der Spieler hat nur die Dateien die man vom MMM-Server runterladen kann, also die winsetup.exe und die spiel.exe, sowie die paar Dateien die sonst noch dabei sind.

Kann das Spiel mit AGS so grogrammiert werden das AGS sich den Character "selber" hochlädt wenn der Spieler die .char Datei zuvor in einem bestimmten Verzeichnis abgelegt hat? Wäre doch ne geile Sache, oder?
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: In AGS Characters (zur Laufzeit) nachladen
« Antwort #1 am: 29. Januar 2015, 12:10:08 »
Das ginge durchaus, man muss allerdings die Sprites alle einzeln als PCX oder BMP haben, alternativ kann man ein Spritesheet verwenden, bei dem exakte Dimensionen im Voraus festgelegt sind. (Man könnte theoretisch sogar beliebige Sprite-Größen benutzen und in einer Textdatei die Koordinaten festlegen; AGS schneidet sich dann die Sprites aus dem Sheet.)

Als Entwickler muss man jetzt globale DynamicSprites deklarieren, in diese die Sprites laden und sie dann mittels ViewFrame* einer View zuweisen, die bereits entsprechende leere Loops und Frames hat.
Zum Schluss nur die View als NormalView des players setzen, fertich.

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #2 am: 29. Januar 2015, 18:18:41 »
Danke für den Hinweis.

Als ich bei den globalen Variablen die dynamik Sprites auswählte sah ich auch das es den Datentyp Character* auch gibt. Kann man nicht auch sofort eine char Datei einlesen?

Und viel wichtiger noch, wie funktioniert das hochladen/einlesen? Bitte mit Quellcode angeben wenn möglich. Ich nehme mal an das man die notwendigen Dateien ins Spielverzeichnis legt und dann mittels dynamischen Pfad darauf zugreifen kann. Wie macht man das mit AGS? Wenn ich die Sachen (zur Laufzeit) schonmal ins Programm bekommen würde wäre mir schon sehr geholfen. Danke.

Und wie kann man (ebenfalls zur Laufzeit) die Schrifft des GUIs ändern (z.B. andere Schrifftart oder andere Farbe)? Ich rede NICHT von einem ganz neuen GUI, das GUI mit seinen 9 Verben blaibt gleich, nur die Schriftart oder Schriftfarbe soll sich ändern lassen (zur Laufzeit)? Danke auch hier für Infos.
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.

Cone Arex

  • Mod
  • alter Tentakel
  • **
  • Beiträge: 2302
  • Geschlecht: Männlich
  • Skandal-Entwickler und Idiot
    • Profil anzeigen
    • Conequest
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #3 am: 29. Januar 2015, 18:36:20 »
Zitat
Als ich bei den globalen Variablen die dynamik Sprites auswählte sah ich auch das es den Datentyp Character* auch gibt. Kann man nicht auch sofort eine char Datei einlesen?
Nein. Character* ist ein Pointer auf Character, also z.B. auf cBernard.

Zitat
Und wie kann man (ebenfalls zur Laufzeit) die Schrifft des GUIs ändern (z.B. andere Schrifftart oder andere Farbe)?
Schau doch in der AGS-Hilfe nach. Du kannst Eigenschaften aller GUI Controlls während der Laufzeit ändern. Die Farbe eines GUI Labels z.B. mit
[ags]lblName.TextColor = 15;[/ags].


Folge mir auf X und itch.io

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #4 am: 29. Januar 2015, 19:14:08 »
Schau doch in der AGS-Hilfe nach. .....

Das ist natürlich eine gute Idee doch wenn man nicht weiß WONACH man suchen soll auch schlecht. Ich habe in AGS gesehen das alle Verben als Grafik hinterlegt sind und zwar zwei mal, einmal normal und einmal mit hellerem Text. Da ich eine andere Schrift und andere Farbe brauche habe ich also fix die neuen Grafiken für die Buttons/Labels erstellt und an der gleichen Stelle plaziert wo auch die anderen Buttongrafiken in AGS liegen.

Doch wie schalte ich jetzt zwischen den alten und neuen Grafiken hin-und her? Wonach muss ich da in der Hilfe suchen? Ich nehme mal an das das irgendwo im GlobalScript festgelegt wird, oder?
« Letzte Änderung: 29. Januar 2015, 19:15:16 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.

BlueCrystal

  • Teenie Tentakel
  • ****
  • Beiträge: 305
  • Geschlecht: Männlich
  • Olla !
    • Profil anzeigen
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #5 am: 29. Januar 2015, 19:44:49 »
Hallo Kiwa,

Ich finde die Idee 100% sehr gut, aber die Umsetzung ist sicher eine Herausforderung..

Für eine MMMNet Sache sicher gut zu gebrauchen.

Lg Blue

Cone Arex

  • Mod
  • alter Tentakel
  • **
  • Beiträge: 2302
  • Geschlecht: Männlich
  • Skandal-Entwickler und Idiot
    • Profil anzeigen
    • Conequest
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #6 am: 29. Januar 2015, 19:49:18 »
Zitat
Das ist natürlich eine gute Idee doch wenn man nicht weiß WONACH man suchen soll auch schlecht.
Die Verben sind GUI Buttons. Das lässt sich leicht im Editor rausfinden. In der Hilfedatei nach GUI Buttons suchen. Und, siehe da: NormalGraphic property.


Folge mir auf X und itch.io

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #7 am: 29. Januar 2015, 22:24:33 »
Danke für diese Hinweise. An folgender Stelle "stehe" ich gerade:

Im AGS Editor habe ich zwei Bereiche gefunden die sich um das GUI drehen.



Hier sieht man die GUI Grafik in Englisch. Die deutschen Verben haben aber im Spiel eine ganz andere Reihenfolge. Allerdings wird hier zu jedem Verb ein Name angezeigt welcher der Button hat, hier gMainGive. Spielt die Reihenfolge den nun eine Rolle oder kann ich "gMainGive" jetzt einfach den Gib-Button zuordnen?



Hier sieht man die deutschen Verben als Sprites. Dort (weiter unten, das ist im Screenshot nicht zu sehen) sind die neuen Sprites. Dort sind aber keine Namen der Sprites zu sehen.

Wie genau kann ich jetzt (z.B. im Raum Startbildschirm) die neuen Sprites den Buttons zuordnen? Ich will im Projekt nicht zuviel experimentieren.
« Letzte Änderung: 29. Januar 2015, 22:27:09 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.

Cone Arex

  • Mod
  • alter Tentakel
  • **
  • Beiträge: 2302
  • Geschlecht: Männlich
  • Skandal-Entwickler und Idiot
    • Profil anzeigen
    • Conequest
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #8 am: 29. Januar 2015, 22:34:03 »
Ich weiß leider nicht, wie das in den rulamanschen Starterpacks realisiert ist.


Folge mir auf X und itch.io

rulaman

  • Moderator
  • Teenie Tentakel
  • *****
  • Beiträge: 354
  • Geschlecht: Männlich
    • Profil anzeigen
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #9 am: 31. Januar 2015, 14:37:35 »
Füge einfach die Bilder hinzu und verweise in Funktionen darauf. Diese rufst du einfach auf.


[ags]
int ReAdjustLanguageLightBlue()
{
  String seperator = String.Format("\\ **** GUI in LightBlue");
   
  SetActionButtons (eActGiveTo,  "a_button_give 5 119 120 Dd");
  SetActionButtons (eActPickUp,  "a_button_pick_up 2 117 118 Ee");
  SetActionButtons (eActUse,     "a_button_use 1 43 88 Ww");
  SetActionButtons (eActOpen,    "a_button_open 3 39 40 Aa");
  SetActionButtons (eActLookAt,  "a_button_look_at 0 37 38 Qq");
  SetActionButtons (eActPush,    "a_button_push 7 91 116 Xx");
  SetActionButtons (eActClose,   "a_button_close 4 89 90 Ss");
  SetActionButtons (eActTalkTo,  "a_button_talk_to 8 121 122 Cc");
  SetActionButtons (eActPull,    "a_button_pull 6 41 42 Yy");
   
  invUparrowONsprite              = 1686;
  //invUparrowOFFsprite           = 1687;
  invDownarrowONsprite           = 1688;
  //invDownarrowOFFsprite        = 1689;
}

int ReAdjustLanguageRed()
{
  String seperator = String.Format("\\ **** GUI in Red-Rose");
   
  SetActionButtons (eActGiveTo,  "a_button_give 5 1704 1705 Dd");
  SetActcodeionButtons (eActPickUp,  "a_button_pick_up 2 1702 1703 Ee");
  SetActionButtons (eActUse,     "a_button_use 1 1696 1697 Ww");
  SetActionButtons (eActOpen,    "a_button_open 3 1692 1693 Aa");
  SetActionButtons (eActLookAt,  "a_button_look_at 0 1690 1691 Qq");
  SetActionButtons (eActPush,    "a_button_push 7 1700 1701 Xx");
  SetActionButtons (eActClose,   "a_button_close 4 1698 1699 Ss");
  SetActionButtons (eActTalkTo,  "a_button_talk_to 8 1706 1707 Cc");
  SetActionButtons (eActPull,    "a_button_pull 6 1694 1695 Yy");
   
  invUparrowONsprite              = 1708;
  //invUparrowOFFsprite           = 1687;
  invDownarrowONsprite           = 1710;
  //invDownarrowOFFsprite        = 1689;
}
[/ags]


und in on_key_press z.B.

[ags]
   if ( keycode == eKeyF2    ) ReAdjustLanguageLightBlue();
   if ( keycode == eKeyF3    ) ReAdjustLanguageRed();
[/ags]

Dann kann der User sich das Aussuchen.

(Lass dich nicht durch die Zeile: String seperator = String.Format … irritieren, die ist nur für AGSLiguist wichtig zur besseren Übersicht.)

Grüße
Rulaman
« Letzte Änderung: 31. Januar 2015, 14:38:04 von rulaman »
Baden ist die einzige Möglichkeit, den Dreck der Füße an den Hals zu bekommen.

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #10 am: 31. Januar 2015, 17:52:22 »
Danke schonmal für die Infos. Ganz klar ist mir die Sache aber noch nicht.

Was bedeuten die ganzen Zahlen und Buchstaben wie z.B. "5 119 120 Dd" z.B. beim Give-Button? Jedes Bild/Sprite hat nur eine Nummer. Muss man die da irgendwo zuordnen?

Und jedes Verb hat zwei Bilder/sprites, einmal standard und einmal wenn der Spieler im Spiel mit der Maus über einen Hotspot fährt und daraufhin ein Verb aufleuchtet. Ich habe also 2 Sprites mit je einer Nummer, also zwei Nummern für ein Verb. In deinem Quellcode sind aber immer 3 Nummern und Buchstaben. Daraus werde ich im Moment noch nicht schlau. Ich habe überlegt ob die erste Zahl das Verb und die zwei folgenden Zahlen die beiden Sprites sind, und aus den Buchsatben werd ich dann aber immer noch nicht schlau.

Als ich es ausprobierte sagte AGS nur "Undefined token 'SetActionButtons' ". Was nun?

EDIT: Ich sehe gerade das es die SetActionButtons Teile nur im GlobalScript gibt. Ich muss aber aus einem Raum darauf zugreifen.

EDIT2: Ok, ich habe nun rausgefunden wofür die Buchstaben sind. Ich wusste bis jetzt gar nicht das es Tastenkürzel für die Verben gibt. Ich spiele eben immer nur mit der Maus.

Bleibt noch die Frage wie man aus einem Raum z.B. dem Startbildschirm die Funktion "SetActionButtons" nutzen kann?
« Letzte Änderung: 31. Januar 2015, 18:12:00 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.

Cone Arex

  • Mod
  • alter Tentakel
  • **
  • Beiträge: 2302
  • Geschlecht: Männlich
  • Skandal-Entwickler und Idiot
    • Profil anzeigen
    • Conequest
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #11 am: 31. Januar 2015, 18:43:40 »
Zitat
Bleibt noch die Frage wie man aus einem Raum z.B. dem Startbildschirm die Funktion "SetActionButtons" nutzen kann?
Schreib dir im Global Script eine Funktion dafür, die du dann im Raum aufrufst.

Also im GS:
[ags]
function GUIWechselDich(int param)
{
SetActionButton(xyz);
...usw.
}
[/ags]
Im Global Header dann importieren:
[ags]
import function GUIWechselDich(int param);
[/ags]
Einmal speichern und compilen, dann kannst du die Funktion überall nutzen.

EDIT: Das int param ist nur hier nur ein Dummy. Musst du selbst schauen, was für einen Parameter du übergeben willst.
« Letzte Änderung: 31. Januar 2015, 18:44:56 von Cone Arex »


Folge mir auf X und itch.io

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: In AGS Characters (zur Laufzeit) nachladen
« Antwort #12 am: 31. Januar 2015, 18:57:05 »
Jetzt funktioniert es perfekt. DANKE AN ALLE DIE MIR GEHOLFEN HABEN!  :D :D :D

Und ich habe sogar mehr gelernt als eigentlich nötige, den nun weiß ich auch wie man direkt über einen Tastendruck Funktionen aufruft. Danke nochmals. Und dafür werdet ihr natürlich auch bald wieder mit einer Epi belohnt. ;) ;) ;) ;D ;D ;D
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.