Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: mukk am 06. April 2011, 11:43:38
-
Ich arbeite grad an der Übersetzung meiner neuen Epi und grübel grad, was ich mit dem GUI anfange.
Das Problem is, dass ich das normale GUI im Laufe des Spiels öfter ein und ausschalte. Das englische GUI hat aber ne neue ID.
Gibt es ne möglichkeit, die ID zu ändern oder irgendwas zu skripten, dass das Spiel bei if (IsTranlationAvalable()==1)
bei allen zugriffen auf GUI 1 stattdessen GUI x benutzt?
Wie habt ihr das denn gelöst, wenn ihr ne Übersetzung gemacht habt?
-
wird das nicht schon im starterpack gehandhabt ???
im endeffekt wird im game_start einfach die passende grafik ins gui geladen, anstatt ein anderes gui einzublenden ;)
-
oh man...gut, dass ich meine Fragen immer so gut durchdenke :-\
jetz hab ich aber n echtes Problem....und zwar steht nur beim engl. GUI bei der Give-Grafik im Spiel die ganze Zeit ein hervorgehobenes Close, und wenn ich mit der Maus drüber gehe, steht da Ziehe (beides als Grafik) ... wie komm ich denn an die ganzen Funktionen vom Gui ran? Könnte auch n kompatibilitätsproblem sein weil das Starterpack noch von anno tobak is und ich AGS 3.1.2 benutze... jedenfalls ist unter Events nirgends was eingetragen.
Dazu kommt noch, das nix ne auswirkung hat...also egal was ich im Gui anklicke, es bleibt bei Go to -.-
Muss dazu sagen, dass ich noch nie was mit GUIs gemacht hab...
-
Ich schätze mal du verwendest AGS? Wenn, dann müsstest du einfach mal durch die Translationfile schauen, irgendwo stehen die ganzen Aktionen übersetzt. Im GlobalScript wird nämlich einfach ein String für jede GUI-Aktion aufgesplittet und Strings werden (mit GetTranslation(string); ) übersetzt. Das wäre auch die Lösung für ein verschiedene GUIs in verschiedenen Übersetzungen. ;)
-
Ja tu ich.
Meinst du in etwa das hier?
Gehe zu %s
Go to %s
Schau an %s
Look at %s
Rede mit %s
Talk to %s
Gib !s an %s
Give !s to %s
Gib %s
Give %s
Wenn das so richtig ist, hab ich das alles schon übersetzt. Das Problem is auch nich, dass die Übersetzung fehlt, sondern dass die Aktionen im Spiel nicht ausgeführt werden....plus die falsche Grafik in der Give-Schaltfläche
-
Öhm nee, irgendwo müssten die auch noch als Buttondefinitionen sein. Habe gerade leider keinen vernünftigen PC, sonst würde ich eben selbst nachschauen. Die Grafiken werden doch durch eine Liste von Zahlen übersetzt.
Ich gehe mal davon aus dass die Buttons ohne Übersetzung funktionieren.
-
kann mich erinnern, dass ich exakt dasselbe problem hatte
wenn es bis heute abend nicht gelöst ist, kann ich ja mal in meine sourcen reinschauen, was ich genau gemacht habe, damit das dann ging
EDIT: aber es liegt auf jeden fall an der übersetzung der von Endres erwähnten zeilen
ist irgend ein string der durch leerzeichen getrennt einige zahlen und buchstaben enthält...
eine dieser spalten steht für die gui-grafik die geladen werden soll
EDIT: ok, hier die lösung
suche im global script nach "function AdjustLanguage ()"
die sieht bei mir so aus
function AdjustLanguage (){
// --- translate yes/no-keys ---
string yes_no;
StrCopy (yes_no, GetTranslation ("JjNn"));
key_u_yes = StrGetCharAt (yes_no, 0);
key_l_yes = StrGetCharAt (yes_no, 1);
key_u_no = StrGetCharAt (yes_no, 2);
key_l_no = StrGetCharAt (yes_no, 3);
// --- translate GUI action buttons ---
SetActionButtons (A_GIVE_TO, "a_button_give 5 802 803 Dd");
SetActionButtons (A_PICK_UP, "a_button_pick_up 2 800 801 Ee");
SetActionButtons (A_USE, "a_button_use 1 794 795 Ww");
SetActionButtons (A_OPEN, "a_button_open 3 790 791 Aa");
SetActionButtons (A_LOOK_AT, "a_button_look_at 0 788 789 Qq");
SetActionButtons (A_PUSH, "a_button_push 7 798 799 Xx");
SetActionButtons (A_CLOSE, "a_button_close 4 796 797 Ss");
SetActionButtons (A_TALK_TO, "a_button_talk_to 8 804 805 Cc");
SetActionButtons (A_PULL, "a_button_pull 6 792 793 Yy");
// --- load font corresponding to language and screen width ---
string font_info;
if (system.screen_width == 320) StrCopy (font_info, GetTranslation ("font_320: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 3 3 3 3 0"));
else if (system.screen_width == 640) StrCopy (font_info, GetTranslation ("font_640: 13 14 14 14 14 14 14 14 14 14 14 14 14 14 13
13 13 13 13 13 14"));
clearToSpace (font_info);
SetSpeechFont (getInteger (font_info)); // Speech
SetLabelFont (0, 0, getInteger (font_info)); // Status-Line
SetLabelFont (3, 4, getInteger (font_info)); // Save/Load-GUI Label
/*
SetLabelFont (3, 5, getInteger (font_info)); // Save-Button of Save/Load-GUI
SetLabelFont (3, 6, getInteger (font_info)); // Load-Button of Save/Load-GUI
SetLabelFont (3, 7, getInteger (font_info)); // Play-Button of Save/Load-GUI
SetLabelFont (3, 8, getInteger (font_info)); // Quit-Button of Save/Load-GUI
*/
SetLabelFont (5, 0, getInteger (font_info)); // Pause-GUI Label
SetLabelFont (6, 0, getInteger (font_info)); // Restore-GUI Label
/*SetLabelFont (6, 5, getInteger (font_info)); // Cancel-Button of Load-GUI
*/
SetLabelFont (7, 0, getInteger (font_info)); // Save-GUI Label
// SetLabelFont (7, 6, getInteger (font_info)); // OK-Button of Save-GUI
// SetLabelFont (7, 7, getInteger (font_info)); // Cancel-Button of Save-GUI
SetLabelFont (9, 0, getInteger (font_info)); // Quit-GUI Label
SetLabelFont (16, 0, getInteger (font_info)); // Restart-GUI Label
}
wobei der block ab "// --- translate GUI action buttons ---" für dich interessant sein drüfte
in meiner translation-datei für englisch sehen die entsprechenden zeilen so aus
a_button_give 5 802 803 Dd
a_button_give 0 1 2 Qq
a_button_pick_up 2 800 801 Ee
a_button_pick_up 1 7 8 Ww
a_button_use 1 794 795 Ww
a_button_use 2 13 14 Ee
a_button_open 3 790 791 Aa
a_button_open 3 3 4 Aa
a_button_look_at 0 788 789 Qq
a_button_look_at 4 9 10 Ss
a_button_push 7 798 799 Xx
a_button_push 5 15 28 Dd
a_button_close 4 796 797 Ss
a_button_close 6 5 6 Zz
a_button_talk_to 8 804 805 Cc
a_button_talk_to 7 11 12 Xx
a_button_pull 6 792 793 Yy
a_button_pull 8 29 30 Cc
-
hat leider nich geholfen...
es is auch nich so, dass die Befehle garnicht funktionieren. Rechtsklick auf hotspots oder Gegenstände bringt bspw. den Look at-Befehl, der auch in der Aktionsleiste dann so steht. Bloß das GUI reagiert halt überhaupt nich. Abgesehen von dem falsch zugeordneten Gebe-Befehl ist es noch so, dass bei nem Klick auf ein Verb nix passiert, weder in der Aktionsleiste, noch im Spiel. Was klappt is das highlighten der Verben über die man grad mitm Mauszeiger fährt.
function AdjustLanguage (){
// --- translate yes/no-keys ---
string yes_no;
StrCopy (yes_no, GetTranslation ("JjNn"));
key_u_yes = StrGetCharAt (yes_no, 0);
key_l_yes = StrGetCharAt (yes_no, 1);
key_u_no = StrGetCharAt (yes_no, 2);
key_l_no = StrGetCharAt (yes_no, 3);
// --- translate GUI action buttons ---
SetActionButtons (A_GIVE_TO, "a_button_give 5 802 803 Dd");
SetActionButtons (A_PICK_UP, "a_button_pick_up 2 800 801 Ee");
SetActionButtons (A_USE, "a_button_use 1 794 795 Ww");
SetActionButtons (A_OPEN, "a_button_open 3 790 791 Aa");
SetActionButtons (A_LOOK_AT, "a_button_look_at 0 788 789 Qq");
SetActionButtons (A_PUSH, "a_button_push 7 798 799 Xx");
SetActionButtons (A_CLOSE, "a_button_close 4 796 797 Ss");
SetActionButtons (A_TALK_TO, "a_button_talk_to 8 804 805 Cc");
SetActionButtons (A_PULL, "a_button_pull 6 792 793 Zz");
// --- load font corresponding to language and screen width ---
string font_info;
if (system.screen_width == 320) StrCopy (font_info, GetTranslation ("font_320: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0"));
else if (system.screen_width == 640) StrCopy (font_info, GetTranslation ("font_640: 13 14 14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 14"));
clearToSpace (font_info);
SetSpeechFont (getInteger (font_info)); // Speech
SetLabelFont (0, 0, getInteger (font_info)); // Status-Line
/* SetLabelFont (3, 4, getInteger (font_info)); // Save/Load-GUI Label
SetLabelFont (3, 5, getInteger (font_info)); // Save-Button of Save/Load-GUI
SetLabelFont (3, 6, getInteger (font_info)); // Load-Button of Save/Load-GUI
SetLabelFont (3, 7, getInteger (font_info)); // Play-Button of Save/Load-GUI
SetLabelFont (3, 8, getInteger (font_info)); // Quit-Button of Save/Load-GUI
SetLabelFont (5, 0, getInteger (font_info)); // Pause-GUI Label
SetLabelFont (6, 0, getInteger (font_info)); // Restore-GUI Label
SetLabelFont (6, 5, getInteger (font_info)); // Cancel-Button of Load-GUI
SetLabelFont (7, 0, getInteger (font_info)); // Save-GUI Label
SetLabelFont (7, 6, getInteger (font_info)); // OK-Button of Save-GUI
SetLabelFont (7, 7, getInteger (font_info)); // Cancel-Button of Save-GUI
SetLabelFont (9, 0, getInteger (font_info)); // Quit-GUI Label
SetLabelFont (16, 0, getInteger (font_info)); // Restart-GUI Label */
}
aus dem Script
a_button_give 5 802 803 Dd
a_button_give 0 1 2 Qq
a_button_pick_up 2 800 801 Ee
a_button_pick_up 1 7 8 Ww
a_button_use 1 794 795 Ww
a_button_use 2 13 14 Ee
a_button_open 3 790 791 Aa
a_button_open 3 3 4 Aa
a_button_look_at 0 788 789 Qq
a_button_look_at 4 9 10 Ss
a_button_push 7 798 799 Xx
a_button_push 5 15 28 Dd
a_button_close 4 796 797 Ss
a_button_close 6 5 6 Zz
a_button_talk_to 8 804 805 Cc
a_button_talk_to 7 11 12 Xx
a_button_pull 6 792 793 Zz
a_button_pull 8 29 30 Cc
font_320: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0
font_640: 13 14 14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 14
aus der .trs
-
Dann solltest du mal die Sprites in den entsprechenden Slots (also z.B. sollte 1 und 2 Give sein) überprüfen.
Außerdem weiß ich immernoch nicht ob das GUI denn nun in der deutschen Fassung geht?
-
Dann solltest du mal die Sprites in den entsprechenden Slots (also z.B. sollte 1 und 2 Give sein) überprüfen.
Ja, da stimmt alles. Is ja auch definitv irgendein Wust im Skript, da die Befehle nich ausgeführt werden.
Außerdem weiß ich immernoch nicht ob das GUI denn nun in der deutschen Fassung geht?
Da du davon ausgegangen bist, dass es geht, hab ich dich nich korrigiert da die Annahme richtig war ;)
-
hmm, also bei mir klappt das
das hab ich bei meiner halloween epi DotD so eingebaut und das basiert auf einem uralten starterpack
keine ahnung, was bei dir anders ist als bei mir ???
hast du evtl. mit den sprite-nummern oder im globalen script herum gespielt? :cl
-
Wer weiß was ich vor drei Jahren da mal gemacht hab :'(
Wäre jemand von euch so nett, da mal ein geübtes Auge drüberschweifen zu lassen?
-
Entferne mal aus den übersetzten Zeilen den Aktionsnamen:
a_button_give 5 802 803 Dd
0 1 2 Qq
a_button_pick_up 2 800 801 Ee
1 7 8 Ww
...
Habs gefunden; bei Bernard's Room sieht die englische Übersetzung so aus (ich habe die originalen Kürzel verwendet):
JjNn
YyNn
a_button_give 5 802 803 Dd
0 1 2 Gg
a_button_pick_up 2 800 801 Ee
1 7 8 Pp
a_button_use 1 794 795 Ww
2 13 14 Uu
a_button_open 3 790 791 Aa
3 3 4 Oo
a_button_look_at 0 788 789 Qq
4 9 10 Ll
a_button_push 7 798 799 Xx
5 15 28 Ss
a_button_close 4 796 797 Ss
6 5 6 Cc
a_button_talk_to 8 804 805 Cc
7 11 12 Tt
a_button_pull 6 792 793 Yy
8 29 30 Xx
Aus irgendeinem Grund wird der übersetzte String anders geparst; bei "a_button_give 0 1 2 Qq" wird "a_button_give" als GUI-Element-ID gelesen, 0 als erste Grafik, 1 als zweite Grafik und 2 als das Kürzel. Das gibt natürlich ein heilloses Durcheinander.
Achja, und bezüglich des ursprünglichen Problems; wäre es nötig, würde man es so machen:
// header
import GUI*maingui;
// Globalscript
GUI*maingui;
export maingui;
// in game_start
if (IsTranslationAvailable()) maingui = gEnglishMainGUI;
else maingui = gMainGUI;
// anschalten
maingui.Visible = true;
-
Jawoll, das wars. Danke dir/euch :)
Is das n AGS-Problem oder n bug im Starterpack?
-
Auf jeden Fall ein bug im Starterpack; ich hab mir die Funktion irgendwann mal angeschaut, aber auf die Schnelle den Fehler nicht finden können. Jedenfalls gehts ja grundsätzlich, man muss nur wissen, wie mans macht.