Ja2.ini

Kein Durchblick im Quellcode von Ja2? Hier werden sie geholfen.

Moderator: Flashy

Antworten
Mysterious Dr.X
Bravo-Squad
Beiträge: 575
Registriert: 14 Mär 2003, 21:32
Kontaktdaten:

Ja2.ini

Beitrag von Mysterious Dr.X » 21 Sep 2005, 15:36

Howdy Rowdies!

Ich wollte heute mal versuchen die Ja2.ini wie bei der neuen "1.13"-Mod einzusetzen um bestimmte Werte auszulesen. So richtig wollte das aber nicht klappen ;)...
Vielleicht könnt ihr mir ja weiterhelfen:
(Build\Strategic\Game Init.c)

Code: Alles auswählen

case DIF_LEVEL_EASY:
iStartingCash	= GetProfileInteger("Options", "Easy", 45000, GAME_INI_FILE);
break;

case DIF_LEVEL_MEDIUM:
iStartingCash	= GetProfileInteger("Options", "Medium", 35000, GAME_INI_FILE);
break;

case DIF_LEVEL_HARD:
iStartingCash	= GetProfileInteger("Options", "Hard", 30000, GAME_INI_FILE);
break;
Die Variable "GAME_INI_FILE" wurde schon mit "..\\Ja2.ini" definiert.
Ich habe den Code mehr oder weniger von der Game Settings.c (Line 262) abgeschrieben. Jedoch wurde dort ein Buchstabe - also ein String - ausgelesen, also hab ich den Code auf den Integer angepasst.
Bei der VC-Hilfe steht nichts davon, dass man die Quell-Datei - in diesem Falle "GAME_INI_FILE" - in der Klammer erwähnen muss, jedoch weiß ich nicht wo ich das sonst unterbringen soll.

Wie ihr euch denken könnt funktioniert der Code so nicht und nimmt einfach den Default-Wert. Ich hoffe einer von euch kann mir hier weiterhelfen ;).


Dr.X
:summer: "I believe in the golden rule. The man with the gold . . . rules!" - Mr.T :summer:
[Tutorial zum Waffenbilder und -werte ändern]

Realist
Alpha-Squad
Beiträge: 1573
Registriert: 24 Apr 2003, 11:00
Wohnort: Düsseldorf

Beitrag von Realist » 21 Sep 2005, 16:02

Bei "GetProfileInteger" bist du schonmal halbwegs verkehrt. ;)
Bei mir hat die Funktion nur drei Parameter und du übergibst vier Argumente -
ich frag mich, wie du deinen Compiler überzeugt hast, das trotzdem zu
kompilieren. ;)

Versuch mal den Funktionsnamen auszutauschen und diese Funktion zu
verwenden: GetPrivateProfileInt(...) - die hat genau jene vier Parameter.

Die gibt übrigens auch gleich einen integer-Wert zurück, also brauchst du da
nichts umwandeln. Lohnt sich auch einen Blick in die Dokumentation zu dieser
Funktion zu werfen. :)

Alle Angaben wie immer ohne Gewähr :D

Mysterious Dr.X
Bravo-Squad
Beiträge: 575
Registriert: 14 Mär 2003, 21:32
Kontaktdaten:

Beitrag von Mysterious Dr.X » 21 Sep 2005, 16:26

Howdy Rowdies!

Du hattest Recht, nun funktioniert's ;)!


Dr.X
:summer: "I believe in the golden rule. The man with the gold . . . rules!" - Mr.T :summer:
[Tutorial zum Waffenbilder und -werte ändern]

Nitrat
Schrecken der Tyrannen
Beiträge: 19301
Registriert: 24 Jul 2000, 11:00

Beitrag von Nitrat » 21 Sep 2005, 16:31

*lol* closen oder für später, falls irgendwelche
fragen aufkommen sollten, solange offen lassen ?

MFG.....

Realist
Alpha-Squad
Beiträge: 1573
Registriert: 24 Apr 2003, 11:00
Wohnort: Düsseldorf

Beitrag von Realist » 21 Sep 2005, 16:44

np @ Dr. X :)

Ne, lass mal offen @ Nitrat
Wär doch schade, wenn dies der erste geschlossene Thread in diesem Unterforum
wäre - außerdem kann immer noch jemand kommen, ders nicht kapier hat. ;)

ReakriegichdasSourceforum?:khelle:list

commandant
Scharfschütze
Beiträge: 2381
Registriert: 06 Mär 2004, 18:09
Wohnort: Nähe von ...

Beitrag von commandant » 21 Sep 2005, 16:59

Wär eine sicher ein Überlegung wert. Nachdem du hier so ziemlich der Einzigste bist, der sich damit auskennt.

Nitrat
Schrecken der Tyrannen
Beiträge: 19301
Registriert: 24 Jul 2000, 11:00

Beitrag von Nitrat » 21 Sep 2005, 17:10

Mich würde es nicht weiter stören, wenn man
es schaffen würde Gorgo davon zu überzeugen :khelle:

MFG.....

-=[MAD]=-
Ironman
Beiträge: 8623
Registriert: 09 Nov 2003, 12:00
Kontaktdaten:

Beitrag von -=[MAD]=- » 22 Sep 2005, 17:10

hehe, wolln wa nen poll dazu erstellen? :khelle:

*dafür bin* :k:

gruss, -=[MAD]=-
neuestes Projekt: Ja2 - Fight For Freedom <-- Neuigkeiten!

Fundgrube für Ja2-Files: http://www.hoenir.de/ja2/

Mysterious Dr.X
Bravo-Squad
Beiträge: 575
Registriert: 14 Mär 2003, 21:32
Kontaktdaten:

Beitrag von Mysterious Dr.X » 23 Sep 2005, 12:46

Howdy Rowdies!

Realist 4 Moderator!

Nun aber zurück zum Thema ;)!

Da das ganze mit dem Startgeld so super geklappt hat, hab ich mich mal daran gemacht die IMP-Generierungstabelle zu editieren (Laptop\IMP Attribute Selection.c). Ist eigentlich genauso simpel wie beim Stargeld, jedoch will VC nicht kompilieren, weil die Werte dann keine Konstanten sind?!

Error-Message:
error C2099: initializer is not a constant

Kleiner Auszug aus dem Code:

Code: Alles auswählen

INT32 iCurrentBonusPoints = 40; // GetPrivateProfileInt( "Options", "BonusPoints", 40, GAME_INI_FILE );
Die Fehlermeldung erscheint, wenn ich die Zahl "40" durch das Auskommentierte ersetze.
Würde mich freuen wenn mir jemand weiterhelfen könnte, falls Realist mal wieder der Einzige ist, der sich meldet: Danke :k:!


Dr.X
:summer: "I believe in the golden rule. The man with the gold . . . rules!" - Mr.T :summer:
[Tutorial zum Waffenbilder und -werte ändern]

Realist
Alpha-Squad
Beiträge: 1573
Registriert: 24 Apr 2003, 11:00
Wohnort: Düsseldorf

Beitrag von Realist » 23 Sep 2005, 14:12

INT32 iCurrentBonusPoints ist eine globale Variable in der IMP Attribute Selection.c,
das heißt, sie muss bei der Initialisierung im Zuge Deklaration mit einer eindeutigen
Konstante belegt werden.

Versuch mal die Variable mit 0 oder überhaupt nicht zu initialisieren, sondern die
Wertzuweisung in einer eigens dafür aufgerufenen Funktion vorzunehmen.

Also machst du eine neue Funktion, schreibst da die Zuweisung mittels
GetPrivateProfileInt rein und fügst jene Funktionssignatur in die entsprechende
Headerdatei ein, die du dann z.B. in der Init.c einbindest, wo du dann schließlich
auch den Funktionsaufruf ausführst.

Reavielleichtnichtdereinzigeaberdafürdererste:khelle:list

Mysterious Dr.X
Bravo-Squad
Beiträge: 575
Registriert: 14 Mär 2003, 21:32
Kontaktdaten:

Beitrag von Mysterious Dr.X » 24 Sep 2005, 11:34

Howdy Rowdies!

Hab nun rausgefunden warum es nicht geklappt hat!
Das Problem war, dass so ziemlich gegen Ende der Datei die ganzen Werte erneut definiert werden. Also so ziemlich alles was ich oben verändert hatte unten noch einmal auftaucht. Dort konnte ich den Wert durch meine "ini"-Zuweisung erfolgreich ersetzen und es funktioniert auch im Spiel.
Das letzte Problem hat ästhetische Wurzeln, denn der "Schiebebalken" passt sich noch nicht automatisch nach oben hin an. D.h. wenn man den Maximalwert z.B. auf 90 setzt, fährt der Schlitten über die Schiene hinaus. Irgendwo muss noch stehen, dass der Balken nur bis zum Wert 85 reicht. Das bekomm' ich aber sicher auch noch irgendwann in den Griff :D.


Dr.X
:summer: "I believe in the golden rule. The man with the gold . . . rules!" - Mr.T :summer:
[Tutorial zum Waffenbilder und -werte ändern]

Realist
Alpha-Squad
Beiträge: 1573
Registriert: 24 Apr 2003, 11:00
Wohnort: Düsseldorf

Beitrag von Realist » 24 Sep 2005, 12:19

Mysterious Dr.X hat geschrieben:Hab nun rausgefunden warum es nicht geklappt hat!
Das Problem war, dass so ziemlich gegen Ende der Datei die ganzen Werte erneut definiert werden. Also so ziemlich alles was ich oben verändert hatte unten noch einmal auftaucht. Dort konnte ich den Wert durch meine "ini"-Zuweisung erfolgreich ersetzen und es funktioniert auch im Spiel.
Das entspricht dem, was ich im vorigen Posting schrieb. :khelle:
Die Sache ist, dass es sich dabei wie gesagt um eine globale Variable handelt und
man kann sie nicht auf der globalen Ebene durch einen Funktionsaufruf initialisieren,
weil dies zur Laufzeit geschehen müsste. Doch zur Laufzeit kann ja auf dieser Ebene
keine Funktion aufgerufen werden, weil diese Stelle nie erreicht wird. Darum muss
man die Initialisierung in einer lokalen Funktion, die dann während der Laufzeit
aufgerufen werden kann, vornehmen. Anders ist es mit Konstanten, die ja bereits
zur Kompilierzeit feststehen und entsprechend schon im Vorfeld zugewiesen werden
können.
Mysterious Dr.X hat geschrieben:Das letzte Problem hat ästhetische Wurzeln, denn der "Schiebebalken" passt sich noch nicht automatisch nach oben hin an. D.h. wenn man den Maximalwert z.B. auf 90 setzt, fährt der Schlitten über die Schiene hinaus. Irgendwo muss noch stehen, dass der Balken nur bis zum Wert 85 reicht.
Ich würde eher diesen Ansatz hier verfolgen (ist die gleiche Datei):

Code: Alles auswählen

// the sizeof one skill unit on the sliding bar in pixels
#define BASE_SKILL_PIXEL_UNIT_SIZE ( ( 423 - 230 ) )
Musst du halt nur ein bischen Verhältnisrechnung betreiben. :D


Reakeinerverstehtmich:khelle:list

Antworten