einfacher Techbaum

Posted By: Aron

einfacher Techbaum - 11/20/05 19:12

Da ich für mein Spiel "Planets - Unification" (ein einfaches RTS) einen Script brauchte, mit dem ich rel. einfach
und unabhängig einen Technologiebaum auslesen und auswerten kann, hab ich mir den kurzerhand selbst geschrieben.

Er ist noch nicht ganz fertig, z.Z. ist es mehr eine Art InGame Hilfe oder sowas.

Naja aufjedenfall wollte ich das Ding mit euch teilen, weil ich denke, dass nicht nur ich sowas brauchen kann.

Ich wollte den Script möglichst modular haben, damit ich ihn auch in späteren Programmen wieder einsetzen kann.
Das ist mir recht gut gelungen denke ich.

Code:
 

/*
* Techtree.wdl - Version 0.2
*
* Modul zum auslesen von Techtreeinformationen oder InGame-Tooltiphilfen aus einer Textdatei
*
* Vorgehensweise zum Einbinden:
* 1. Einbinden per include ( include<techtree.wdl>; )
* 2. über setTechFilename("DATEINAME") den Dateinamen des Techtrees einstellen (default:techtree.txt)
* 3. per initTechtree("TRENNUNGSOPERATOR"); den techtree initialisieren ( empfohlen: ";")
* 4. einfach über die get* Funktionen die Informationen als Strings auslesen und weiterverarbeiten
*
* Beispiel für eine techtree.txt mit 2 einträgen :
* Bergbau;300;1000;2000;3000;Erlaubt den Bau von:;Erzmine,Deuteriummine,;Kristallmine
* Laser;300;150;1111;3333;Wird benötigt um;Laserwaffen und lasergesteuerte;Raketen herzustellen.
*
* Syntax einer Zeile (hinter der letzen Info NUR Enter drücken,kein SEMIKOLON!):
* NAME;BAUZEIT;KOSTEN_ERZ;KOSTEN_KRISTALL;KOSTEN_DEUTERIUM;BESCHREIBUNG1;BESCHREIBUNG2;BESCHREIBUNG3
*
* Für die Benutzung und Veränderung sind keine Credits erforderlich. Viel Spaß damit !
*
*/

var techtreefile; //Handle für die Techtreedatei
string techfilename = "techtree.txt"; //Name der Datei in dem die Techinformationen gespeichert sind

var zaehler=1; //Zeilenzähler

// Deklaration der benötigten Strings
string techName;
string techKostenErz;
string techKostenKristall;
string techKostenDeuterium;
string techZeit;
string techBeschreibung;

function initTechtree(seperator) //setzt z.Z. nur das Trennungszeichen neu
{
str_cpy(delimit_str,seperator);
}

function setTechFilename(newname) //erlaubt das setzen eines neuen Dateinamens für die Technologiedatei
{
str_cpy(techfilename,newname);
}

function getTechName(Stelle) //holt den Namen der Technologie
{
Stelle = 1+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techName);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techName);
}

function getTechZeit(Stelle) //holt die Bau-/Forschungszeit der Technologie
{
Stelle = 2+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techZeit);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techZeit);
}

// Die folgenden 3 Funktionen holen den jeweiligen Rohstoffbedarf (Erz,Kristall,Deuterium) zum Bauen/Forschen

function getTechKostenErz(Stelle)
{
Stelle = 3+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techKostenErz);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techKostenErz);
}

function getTechKostenKristall(Stelle)
{

Stelle = 4+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techKostenKristall);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techKostenKristall);
}

function getTechKostenDeuterium(Stelle)
{
Stelle = 5+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techKostenDeuterium);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techKostenDeuterium);
}

// Holt die jeweilige Zeile (von bis zu 3), die Informationen über die Technologie enthalten kann.

function getTechBeschreibung(Stelle,Zeile)
{
if((Zeile>=4)||(Zeile<=0))
{return ("");
}
else
{
Stelle = (Zeile+5)+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techBeschreibung);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techBeschreibung);
}
}




In einer späteren Version werden auch Funktionen kommen, mit denen man direkt überprüfen kann ob man
eine bestimmte Technologie erforschen kann oder nicht. Also sozusagen eine Prüfung der Abhängigkeiten
zwischen den Technologien.

Falls es eine neue Version gibt, wird die selbstverständlich auch contributed.

Für C&C bin ich immer offen
Posted By: XNASorcerer

Re: einfacher Techbaum - 11/20/05 20:20

What?
Posted By: Aron

Re: einfacher Techbaum - 11/20/05 20:41

Ok ^^ a brief description in english.

I am working on a modular techtree-script. This up there is the most recent version,which you can use to create a in-game-help-system.
In a later version there will be functions for comparing if you are already able to research a specific tech or if you still need a
pre-tech.

I will translate the Comments for our english users within the next week, so you won't be locked out ^^.

Hope my english isn't as bad as is think.
Posted By: DoC

Re: einfacher Techbaum - 11/20/05 21:01

ziemlich cool muss ich mal testen... allgemein wäre mal ein tutorial für ein RTS cool... es gab ja mal was von realspawn... aber da kam nix mehr nach und wasteland is immo das coolste was man hier gesehn hat ich will sowas auch mal selber machen ala C&C... nur übersteigt das meine fähigkeiten bin mehr der für RPG codes macht ^^...
Posted By: Aron

Re: einfacher Techbaum - 11/20/05 21:18

Naja wenn die Zeit gekommen ist, werde ich mein Projekt auch vorstellen. Es gibt zwar schon Screens, aber da ist noch nichts
weltbewegendes drauf, deswegen warte ich noch. Wenn es irgendwo Probleme gibt, bitte melden, dass ich die schnellstmöglich
beseitigen kann.
Posted By: XNASorcerer

Re: einfacher Techbaum - 11/20/05 22:19

Thanks
Posted By: Lion_Ts

Re: einfacher Techbaum - 11/20/05 23:36

Pretty nice for RTS, I think.
Translate, please. And Thank you, Aron.
Posted By: Aron

Re: einfacher Techbaum - 11/21/05 15:18

I will translate it this evening,so the english users can use this handy script for their projects too.
The next step (checking if a research is possible->all conditions for research are met)is already planned and will be added within this week I think.
Posted By: TheGameMaker

Re: einfacher Techbaum - 11/21/05 15:21

Kristall, Erz und Deuterium???
Ist da zufällig Ogame spieler???
Danke nützlich!
Posted By: Aron

Re: einfacher Techbaum - 11/21/05 15:30

@TheGameMaker:
Die Spielidee war ursprünglich von OGame (eher von SpacePioneers) abgeguckt, hat sich aber weiterentwickelt zu was eigenem.
Dass ich nu bei den Rohstoffen geblieben bin ist Zufall. Hatte auch ursprünglich noch Bevölkerung als Ressource eingebaut.
Ich mag OGame nicht ^^
Posted By: TheGameMaker

Re: einfacher Techbaum - 11/21/05 18:51

warum nicht??
Posted By: Aron

Re: einfacher Techbaum - 11/21/05 19:12

I am translating the Script right now.

@TheGameMaker: Weil mich das Spiel genervt hat ... wie soviele Browsergames. Das einzige tolle Browserspiel war "SpacePioneers" bis es kostenpflichtig wurde.
Posted By: Dima

Re: einfacher Techbaum - 11/21/05 20:00

Sorry for offtopic but ...

Deuterium ist nicht weiter als ein Isotop des Wasserstoffes! Deswegen darf man es verwenden wo man es will, und wie man es will!

Gruß Dima
Posted By: Nicolas_B

Re: einfacher Techbaum - 11/21/05 20:04

cool danke.
Werds mir merken. Wird sicher mal nützlich sein
Posted By: JoGa

Re: einfacher Techbaum - 11/21/05 20:53

Sehr gute Idee! Hatte ähnlichen Einfall, wusste aber nicht, wie man das realisiert.
Hut ab!
Posted By: Aron

Re: einfacher Techbaum - 11/21/05 21:08

This is the first Post of this Topic in english:
Because I needed a script which can handle a techtree for my planned RTS "Planets - Unification" I wrote it myself ^^

It isn't 100% complete... at the moment it is more a InGame Help or something like this.

I wanted to create the script very modular, so i can take it out of my game and place it in any other project without
big changes.

Nevertheless I want to share it with you ( and also the later versions of this script)

Code:
 

/*
* Techtree.wdl - Version 0.2
*
* module for reading ans using techtrees out of a textfile
*
* How to usw techtree.wdl:
* 1. include ( include<techtree.wdl>; )
* 2. set the name of your techtreefile through setTechFilename("DATEINAME") [default:techtree.txt]
* 3. initTechtree("seperator"); to initialize the techtree ( recommended: ";")
* 4. get your information with the get*-functions and process them as you like
*
* example techtree.txt with two lines :
* mining;300;1000;2000;3000;Is needed for:;Oremine,Deuteriumsynthesizer,;crystalmine
* Laser;300;150;1111;3333;Provides your army with;laserweapons and laserguided;missles.
*
* Syntax (after the last Info ENDLINE(Return) instead of semikolon(;)
* name;buildtime;cost_ore;cost_crystal;cost_deuterium;description1;description2;description3
*
* This script can be uses in (non-)commercial projects without credits. Have fun with it !
*
*/

var techtreefile; //Handle for Techtreefile
string techFilename = "techtree.txt"; //Name of the file with the techtreedata

var counter=1; //Linecounter

// declaration of the needed Strings
string techName;
string techCostErz;
string techCostKristall;
string techCostDeuterium;
string techTime;
string techDescription;

function initTechtree(seperator) //only changes the seperator at the moment
{
str_cpy(delimit_str,seperator);
}

function setTechFilename(newname) //here you can change the filename of your techtreefile
{
str_cpy(techfilename,newname);
}

function getTechName(Position) //returns the name of a technology
{
Position = 1+((Position-1)*8);
techtreefile = file_open_read(techFilename);
while(counter<=Position)
{
file_str_read(techtreefile, techName);
counter+=1;
}
file_close(techtreefile);
counter=1;
return(techName);
}

function getTechTime(Position) //returns the building or researchtime for a tech
{
Position = 2+((Position-1)*8);
techtreefile = file_open_read(techFilename);
while(counter<=Position)
{
file_str_read(techtreefile, techTime);
counter+=1;
}
file_close(techtreefile);
counter=1;
return(techTime);
}

// The following 3 functions are returning the needed ammount of ressource (Ore,Crystal,Deuterium) for building or researching
function getTechCostErz(Position)
{
Position = 3+((Position-1)*8);
techtreefile = file_open_read(techFilename);
while(counter<=Position)
{
file_str_read(techtreefile, techCostErz);
counter+=1;
}
file_close(techtreefile);
counter=1;
return(techCostErz);
}

function getTechCostKristall(Position)
{

Position = 4+((Position-1)*8);
techtreefile = file_open_read(techFilename);
while(counter<=Position)
{
file_str_read(techtreefile, techCostKristall);
counter+=1;
}
file_close(techtreefile);
counter=1;
return(techCostKristall);
}

function getTechCostDeuterium(Position)
{
Position = 5+((Position-1)*8);
techtreefile = file_open_read(techFilename);
while(counter<=Position)
{
file_str_read(techtreefile, techCostDeuterium);
counter+=1;
}
file_close(techtreefile);
counter=1;
return(techCostDeuterium);
}


// Gets the Line of the techdescription
function getTechDescription(Position,Line)
{
if((Line>=4)||(Line<=0))
{return ("");
}
else
{
Position = (Line+5)+((Position-1)*8);
techtreefile = file_open_read(techFilename);
while(counter<=Position)
{
file_str_read(techtreefile, techDescription);
counter+=1;
}
file_close(techtreefile);
counter=1;
return(techBeschreibung);
}
}




So I just translated it and I hope I havent overseen a german variable or comment in this script.
I hope you understand my bad english comments ^^
Maybe I won't translate every Version of this script because it costs me a vast ammount of time (I could spend in finishing it).
But every big "release" will be translated.

I didn't test this script after translating it, so if you do please report any bug you found.

Right now I am working on a function which is able to compare the players techlevel with the needed techs
for a technology. This way it becomes a REAL techtreescript.

If there is a newer Version of this script, I will contribute it here.

Critics&Comments are welcome.
© 2024 lite-C Forums