/* This file is part of Advanced Strategic Command; http://www.asc-hq.de Copyright (C) 1994-1999 Martin Bickel and Marc Schellenberger This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "tpascal.inc" #include "typen.h" #include "sgstream.h" #include "misc.h" #include "vesa.h" struct tovehicletype { /* vehicleart: z.B. Schwere Fuátruppe */ char* name; /* z.B. Exterminator */ char* description; /* z.B. Jagdbomber */ char* infotext; /* optional, kann sehr ausfhrlich sein. Empfehlenswert ber eine Textdatei einzulesen */ tweapons attack; /* Angriffsst„rke der einzelnen Waffen */ tpk production; /* Produktionskosten der vehicle */ Word armor; Pointer picture[8]; /* 0ø , 45ø */ Byte height; /* BM Besteht die M”glichkeit zum H”henwechseln */ word researchid; int terrain; /* BM befahrbare terrain: z.B. Schiene, Wasser, Wald, ... */ int terrainreq; /* BM diese Bits MšSSEN in ( field->typ->art & terrain ) gesetzt sein */ int terrainkill; /* falls das aktuelle field nicht befahrbar ist, und bei field->typ->art eine dieser Bits gesetzt ist, verschwindet die vehicle */ Byte steigung; /* max. befahrbare H”hendifferenz zwischen 2 fieldern */ Byte jamming; /* St„rke der St”rstrahlen */ Word view; /* viewweite */ char wait; /* Kann vehicle nach movement sofort schieáen ? */ Byte tiefgang; /* Fr Schiffe: Tiefgang; bei vehicle: Gewicht */ Word loadcapacity; /* Transportm”glichkeiten */ word maxunitweight; /* maximales Gewicht einer zu ladenden vehicle */ char loadcapability; /* BM CHoehenStufen die zu ladende vehicle muá sich auf einer dieser H”henstufen befinden */ char loadcapabilityreq; /* eine vehicle, die geladen werden soll, muá auf eine diese H”henstufen kommen k”nnen */ char loadcapabilitynot; /* eine vehicle, die auf eine dieser H”henstufen kann, darf NICHT geladen werden. Beispiel: Flugzeuge in Transportflieger */ Word id; int tank; Word fuelconsumption; int energy; int material; int functions; char movement[8]; /* max. movementsstrecke */ char movemalustyp; /* wenn ein Bodentyp mehrere Movemali fr unterschiedliche vehiclearten, wird dieser genommen. <= cmovemalitypes */ tthreatvar generalthreatvalue; /* Wird von ArtInt ben”tigt, auáerhalb keine Bedeutung */ tthreatvar threatvalue[8]; /* dito */ char classnum; /* Anzahl der Klassen, max 8, min 0 ; Der EINZIGE Unterschied zwischen 0 und 1 ist der NAME ! */ char* classnames[8]; /* Name der einzelnen Klassen */ tclassbound classbound[8]; /* untergrenze (minimum), die zum erreichen dieser Klasse notwendig ist, classbound[0] gilt fr vehicletype allgemein*/ char maxwindspeedonwater; //char digrange; // Radius, um den nach bodensch„tzen gesucht wird. 0 bedeutet, es muá manuell ein field ausgew„hlt werden //int dummy[16]; }; dacpalette256 pal; void main ( void ) { find_t fileinfo; unsigned rc; /* return code */ tovehicletype fzta; tvehicletype fztn; int i,j; char* nm,*nn; char *pi,*pj; mainstream.init(); pj = (char*) malloc ( 800 ); nm = (char*) malloc ( 200 ); rc = _dos_findfirst( "*.veh", _A_NORMAL, &fileinfo ); while( rc == 0 ) { memset ( &fztn, 0, sizeof ( fztn )); mainstream.openstream( fileinfo.name, 1); if (mainstream.getstatus() != 0) { printf("unable to oepn %s \n\n",fileinfo.name); return ; } mainstreamread( fzta, sizeof(fzta)); memcpy ( &fztn, &fzta, sizeof ( fzta )); if (fzta.name) mainstream.readpchar( &fztn.name ); if (fzta.description) mainstream.readpchar( &fztn.description ); if (fzta.infotext) mainstream.readpchar( &fztn.infotext ); for (i=0;i<8 ;i++ ) if ( fzta.classnames[i] ) mainstream.readpchar( &(fztn.classnames[i]) ); int w; for (i=0;i<8 ;i++ ) if ( fzta.picture[i] ) mainstream.readrlepict ( (char**) &(fztn.picture[i]), false, &w); mainstream.closestream(); mainstream.openstream(fileinfo.name,2); if (mainstream.getstatus() != 0) { printf(" Error writing file !\n\n"); return ; } mainstream.writedata ( (char*) &fztn, sizeof(fztn)); if (fztn.name) mainstream.writepchar( fztn.name ); if (fztn.description) mainstream.writepchar( fztn.description ); if (fztn.infotext) mainstream.writepchar( fztn.infotext ); for (i=0; i<8; i++) if ( fztn.classnames[i] ) mainstream.writepchar( fztn.classnames[i] ); for (i=0;i<8 ;i++ ) if ( fztn.picture[i] ) mainstream.writedata ( (char*) fztn.picture[i], tanksize ); if (fztn.picture[1] == NULL) fztn.picture[1] = fztn.picture[0]; loaderror = mainstream.getstatus (); mainstream.closestream(); printf( "%s written \n",fileinfo.name ); rc = _dos_findnext( &fileinfo ); } mainstream.done(); }