|
-
[G1] Versionsnummer im Hauptmenü
Hey. Gibt es in Gothic 1 irgendwie eine Möglichkeit, im Hauptmenü die Spielversion auszublenden?
-
Yes there is. There is .ini entry to set this value.
Code:
[OPTIONS]
show_Version = TRUE
show_VersionX = 6500
show_VersionX = 7200
values are virtual positions on screen where left, top is 0,0 and right bottom are 8192, 8192
-
Thank you Mark56, but this seems only to work in Gothic 2. I need a solution for Gothic 1.
-
Zitat von lali
Thank you Mark56, but this seems only to work in Gothic 2. I need a solution for Gothic 1.
I can't dissassemble G1 right now, don't know if there is option for it. if not some system pack memory override could help change position off screen or just no-op its insertion. I am not that experienced with this type of stuff. I believe mud-freak and Lehona or MaGoth could help ?
-
Das ist jetzt nicht sehr hilfreich, aber: Wofür möchtest du das denn? Eine zusätzliche Versionsnummer für deine Mod könntest du ja trotzdem einblenden, denke ich.
Zitat von Mark56
I can't dissassemble G1 right now, don't know if there is option for it. if not some system pack memory override could help change position off screen or just no-op its insertion. I am not that experienced with this type of stuff. I believe mud-freak and Lehona or MaGoth could help ?
I'm not really versed in G1, but before I try to look that up I'd like to know why :P
-
Das hier sollte die von Mark genannte Option in Gothic 1 einfügen:
Zu Beginn der Funktion InitPerceptions (in der Datei AI\AI_Intern\perception.d) die Zeile hideVersionInfo(); eintragen. Damit wird dann der INI-Eintrag berücksichtigt. Existiert OPTIONS.showVersion und steht auf FALSE wird, wie bei Gothic 2 der Fall, die Versionsinfo nicht angezeigt (sowohl mit als auch ohne SystemPack).
Ich hoffe ich habe damit jetzt Lehona nicht einen Strich durch die Rechnung gemacht, herauszukitzeln wozu das gut sein soll.
Code:
/*
* Add option to hide version information from Gothic 1 main menu
*/
func void hideVersionInfo() {
if (GOTHIC_BASE_VERSION != 1) {
return;
};
MEM_InitAll();
var string opt; opt = STR_Upper(MEM_GetModOpt("OPTIONS", "show_Version"));
if (Hlp_StrCmp(opt, "FALSE") || (Hlp_StrCmp(opt, "0"))) {
const int versioninfo = 8625432; //0x839D18
const int versioninfo_sp = 8189302; //0x7CF576
MemoryProtectionOverride(versioninfo, 1);
MemoryProtectionOverride(versioninfo_sp, 1);
MEM_WriteByte(versioninfo, 0);
MEM_WriteByte(versioninfo_sp, 0);
};
};
Geändert von mud-freak (21.10.2019 um 21:18 Uhr)
Grund: Code für 0 oder false in der INI erweitert, Mod Ini
-
Thank you anyway, Mark. :)
Zitat von Lehona
Das ist jetzt nicht sehr hilfreich, aber: Wofür möchtest du das denn? Eine zusätzliche Versionsnummer für deine Mod könntest du ja trotzdem einblenden, denke ich.
Darum ging es mir erstmal nicht. Immoment nutzen wir die Möglichkeit, über das SystemPack das Interface größer zu skalieren, um dadurch z.B. die Bars größer anzuzeigen und die Navigationspunkte im Hauptmenü. Langfristig brauchen wir da eine andere Lösung, dass wir das Menü für Menü und Objekt für Objekt einzeln anpassen können (das Logbuch wird jetzt z.B. zu groß angezeigt), aber bis auf Weiteres wollte ich das mal so halten.
Die Versionsnummer ist dadurch auch größer, aber auch unabhängig der Größe hat sie mich gestört. Es würde ja ausreichen, sie z.B. im Optionsmenü anzuzeigen. Im GothicStarter wird sie ja auch schon angezeigt. Und wir werden mit nem späteren Installer sicherlich auch gleich das Spiel mit patchen, spätestens dann weiß man, welche Version man hat. Jedenfalls hatte ich mir in den Kopf gesetzt, das Hauptmenü etwa so zu rekonstruieren, wie man es im Gameplay Trailer von 2000 sehen konnte. Also wir haben da keine Grafik unterhalb der Menüpunkte, so dass die Versionsnummer da irgendwie Platz hätte. Und da hat das die angestrebte Optik kaputt gemacht. :p
Zitat von mud-freak
Das hier sollte die von Mark genannte Option in Gothic 1 einfügen:
Zu Beginn der Funktion InitPerceptions (in der Datei AI\AI_Intern\perception.d) die Zeile hideVersionInfo(); eintragen. Damit wird dann der INI-Eintrag berücksichtigt. Existiert OPTIONS.showVersion und steht auf FALSE wird, wie bei Gothic 2 der Fall, die Versionsinfo nicht angezeigt (sowohl mit als auch ohne SystemPack).
Ich hoffe ich habe damit jetzt Lehona nicht einen Strich durch die Rechnung gemacht, herauszukitzeln wozu das gut sein soll.
Code:
/*
* Add option to hide version information from Gothic 1 main menu
*/
func void hideVersionInfo() {
if (GOTHIC_BASE_VERSION != 1) {
return;
};
MEM_InitAll();
if (Hlp_StrCmp(MEM_GetGothOpt("OPTIONS", "show_Version"), "FALSE")) {
const int versioninfo = 8625432; //0x839D18
const int versioninfo_sp = 8189302; //0x7CF576
MemoryProtectionOverride(versioninfo, 1);
MemoryProtectionOverride(versioninfo_sp, 1);
MEM_WriteByte(versioninfo, 0);
MEM_WriteByte(versioninfo_sp, 0);
};
};
Vielen Dank für die Mühe mud-freak.
So ganz verstehe ich das nicht und bisher funktioniert es leider auch nicht.
Ich habe es in die InitPerception eingetragen, also so:
Code:
FUNC VOID InitPerceptions()
{
hideVersionInfo(); // F: Von mud-freak, um die Version im Menü auszublenden.
[hier der restliche Code]
};
Wieso soll das denn ausgerechnet hier rein?
In der .ini sieht es jetzt so aus (ich habe 0 und 1 getestet, hat aber keinen Unterschied gemacht):
Code:
[OPTIONS]
show_info=0
show_Version=1
force_subtitles=1
force_parameters=
playLogoVideos=0
-
Zitat von lali
Wieso soll das denn ausgerechnet hier rein?
Die Funktion ist die erste, die im Spiel aufgerufen wird (noch vor erster Erstellung des Hauptmenüs). Mein Code überschreibt ein Byte in der Exe, sodass die Version ab dem Zeitpunkt nicht mehr angezeigt wird.
EDIT: So könnt ihr Gothic übrigens auch komplett über die Skripte beim Spielstart patchen und braucht das nicht über einen Installer machen (wenn ich dich richtig verstanden habe). Die EXE zu verändern, würde nämlich zu Inkompatibilitäten mit anderen Mods führen.
Zitat von lali
In der .ini sieht es jetzt so aus (ich habe 0 und 1 getestet, hat aber keinen Unterschied gemacht):
Ich habe in meinem Post ja auch geschrieben, dass nach FALSE abgefragt wird und nicht 0 und 1
EDIT: Ich habe das Skript oben angepasst damit es Groß- und Kleinschreibung von False ignoriert und auch für 0 funktioniert.
Geändert von mud-freak (20.10.2019 um 13:11 Uhr)
-
Zitat von mud-freak
EDIT: So könnt ihr Gothic übrigens auch komplett über die Skripte beim Spielstart patchen und braucht das nicht über einen Installer machen (wenn ich dich richtig verstanden habe). Die EXE zu verändern, würde nämlich zu Inkompatibilitäten mit anderen Mods führen.
Ich bin mir sicher er meint nur die Installation des neusten G1-Patches, also 1.08k oder was auch immer da aktuell ist (oder das SP).
-
Ah danke fürs Aufklären. Das macht natürlich mehr Sinn in dem Kontext.
-
Zitat von mud-freak
Die Funktion ist die erste, die im Spiel aufgerufen wird (noch vor erster Erstellung des Hauptmenüs). Mein Code überschreibt ein Byte in der Exe, sodass die Version ab dem Zeitpunkt nicht mehr angezeigt wird.
Verstehe.
Ich habe in meinem Post ja auch geschrieben, dass nach FALSE abgefragt wird und nicht 0 und 1
EDIT: Ich habe das Skript oben angepasst damit es Groß- und Kleinschreibung von False ignoriert und auch für 0 funktioniert.
Achso. Ich dachte das Spiel könnte zwischen False und 0 sowieso nicht unterscheiden oder so.
Hmm, also es zeigt immernoch keine Auswirkung.. Ich habe es bisher testweise in meiner eigenen .ini und in der GothicGame.ini versucht (sowohl mit dem alten als auch mit deinem aktualisierten Code). Ich probiere noch irgendwie rum. Wäre ja toll, wenn man ne Fehlermeldung kriegen würde, aber da gar nichts passiert...?
Zitat von Lehona
Ich bin mir sicher er meint nur die Installation des neusten G1-Patches, also 1.08k oder was auch immer da aktuell ist (oder das SP).
Ja, so meinte ich das.
-
Zitat von lali
Hmm, also es zeigt immernoch keine Auswirkung.. Ich habe es bisher testweise in meiner eigenen .ini und in der GothicGame.ini versucht (sowohl mit dem alten als auch mit deinem aktualisierten Code).
Es geht um die Gothic.ini
-
Okay, das war dumm. Dann hab ich vergessen, dass ich in dem Fall ja mit Override arbeiten muss. Danke nochmal. Noch eine Rückfrage: Es wird ja ein Byte in der .exe überschrieben. Wie findest du denn raus, welches Byte du überschreiben willst? Und womit wird es denn überschrieben?
Und zu meinem weiteren Verständnis: Stehen alle in der Engine "hardkodierten" Sachen in der .exe drin und können die alle überschrieben werden? Wenn also zB. das ATR_STRENGTH da steht und ich will dass es anders heißt (nicht der Name "Stärke"), sondern wenn jetzt dieses Attribut nicht gebraucht würde und stattdessen soll da ATR_INTELLIGENCE oder sonstwas stehen (hypothetisch), kann ich dann der Engine durch so einen Hack einflößen, dass er diese neue Konstante akzeptiert, die ich dann auch global ganz einfach in Daedalus nutzen kann? Oder ist das falsch gedacht?
-
Zitat von lali
Okay, das war dumm. Dann hab ich vergessen, dass ich in dem Fall ja mit Override arbeiten muss.
Ich glaube, das ist mein Fehler. Wird das bei Gothic 2 zufällig standardmäßig in der GothicGame.ini (bzw. Mod Ini) oder in der Gothic.ini eingestellt (kann ich gerade nicht nachschauen)? Dann sollte ich das noch einmal anpassen. Ein Override sollte da nicht funktionieren. Ich werde mir das noch einmal anschauen.
Zitat von lali
Noch eine Rückfrage: Es wird ja ein Byte in der .exe überschrieben. Wie findest du denn raus, welches Byte du überschreiben willst? Und womit wird es denn überschrieben?
In diesem Fall habe ich die Versionsanzeige entfernt, in dem ich den Versions-Text durch einen leeren (= Länge null) ersetzt habe. Speziell heißt das, das erste Zeichen mit einem Null-Byte zu überschreiben. (Die Null signalisiert das Ende der Zeichenkette.) Die genaue Adresse in der Exe kannte ich schon, weil ich mir diesen Text auch schon einmal angeschaut hatte. Randnotiz: Das SystemPack verschiebt diese Adresse, deshalb werden in meinem Code zwei Bytes überschrieben, jeweils für mit und ohne SP.
Zitat von lali
Und zu meinem weiteren Verständnis: Stehen alle in der Engine "hardkodierten" Sachen in der .exe drin und können die alle überschrieben werden? Wenn also zB. das ATR_STRENGTH da steht und ich will dass es anders heißt (nicht der Name "Stärke"), sondern wenn jetzt dieses Attribut nicht gebraucht würde und stattdessen soll da ATR_INTELLIGENCE oder sonstwas stehen (hypothetisch), kann ich dann der Engine durch so einen Hack einflößen, dass er diese neue Konstante akzeptiert, die ich dann auch global ganz einfach in Daedalus nutzen kann? Oder ist das falsch gedacht?
Ja, einige allerdings mit mehr Aufwand. Dein Beispiel könnte evlt. nicht umsetzbar sein, da der neue Name länger ist als der alte. Dazu müsste man Adressen verschieben, um Raum zu schaffen und auch alle Referenzen zu diesem betroffenen Bereich müssten überall angepasst werden.
-
Zitat von mud-freak
Ich glaube, das ist mein Fehler. Wird das bei Gothic 2 zufällig standardmäßig in der GothicGame.ini (bzw. Mod Ini) oder in der Gothic.ini eingestellt (kann ich gerade nicht nachschauen)? Dann sollte ich das noch einmal anpassen. Ein Override sollte da nicht funktionieren. Ich werde mir das noch einmal anschauen.
Ja, soweit ich weiß wird das eigentlich in der Mod-Ini angegeben. Man will ja nicht unbedingt dem Spieler eine neue Gothic.ini unterjubeln und seine modifizieren. Allerdings tun wir das aktuell auch im Bezug auf andere Dinge, die man nur darüber einstellen kann, wie etwa die Sky Colors etc.
In diesem Fall habe ich die Versionsanzeige entfernt, in dem ich den Versions-Text durch einen leeren (= Länge null) ersetzt habe. Speziell heißt das, das erste Zeichen mit einem Null-Byte zu überschreiben. (Die Null signalisiert das Ende der Zeichenkette.) Die genaue Adresse in der Exe kannte ich schon, weil ich mir diesen Text auch schon einmal angeschaut hatte. Randnotiz: Das SystemPack verschiebt diese Adresse, deshalb werden in meinem Code zwei Bytes überschrieben, jeweils für mit und ohne SP.
Und wenn du die Adresse nicht kennst, wie kannst du das dann rausfinden?
edit:
Ich muss mich entschuldigen. Ich war so fixiert auf die eigene Mod.ini, weil ich ja auch wusste, dass es in Gothic 2 da abläuft etc., dass ich überhaupt nicht in der Gothic.ini nachgesehen habe. In der Gothic.ini gibts aber tatsächlich schon einen Punkt:
Code:
menuShowVersion=1
; ... show version-number of gothic in menu, default is 1
Dachte in Gothic 1 gäbs das gar nicht. Allerdings hat auch das keinerlei Auswirkung.
Zumindest nicht mit installiertem SystemPack, ohne hab ich jetzt nicht getestet.
Nach dem Eintrag von show_version in der Gothic.ini, wie du gesagt hast, funktioniert es jetzt auch. Wäre natürlich trotzdem gut, wenn es noch eine Lösung für die Mod.ini gäbe. Warum soll in dem Fall eigentlich kein Override funktionieren?
Geändert von lali (21.10.2019 um 15:21 Uhr)
-
Zitat von lali
Ja, soweit ich weiß wird das eigentlich in der Mod-Ini angegeben.
Ich habe das oben im Skript verbessert. Nun wird (wie bei Gothic 2 auch) in der Mod-Ini nach diesem Eintrag gesucht.
-
Läuft problemlos. Danke nochmal.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|