/* 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 "..\tpascal.inc" #include "..\typen.h" #include "..\newfont.h" #include "..\vesa.h" #include "..\loadpcx.h" #include "krkr.h" #include "..\sgstream.h" #include "..\misc.h" #include "..\keybp.h" char mode50 = 1; #define la 80 int offset = 1560; pfont fnt; const char* bildnr[8] = { " 0 ( object facing up ) ", " 1 ( object facing up and right ) ", " 2 ( object facing right ) ", " 3 ( object facing right and down ) ", " 4 ( object facing down ) ", " 5 ( object facing down and left ) ", " 6 ( object facing left ) ", " 7 ( object facing left and up ) " }; void * loadpcx2(char * filestring); char bip[24] = { 0,1,2,3,5,7,9,11,15,18,19,20,21,22,23,27,28,29,30,31,54,55,63,6}; main (int argc, char *argv[] ) { t_carefor_containerstream cfcst; try { pobjecttype ft; tfile datfile; char pict = YES; // Bilder einlesen char dif = 1; // Anzahl der Bilder char mehrfielderschuetze = 0; char maxmovement = 0; ft = new tobjecttype; memset ( ft, 0, sizeof (tobjecttype) ) ; strcpy (datfile.name, ""); { tnfilestream stream ( "USABLACK.FNT", 1 ); fnt = loadfont ( &stream ); } activefontsettings.font = fnt; activefontsettings.color = black; activefontsettings.background = white; activefontsettings.length = 600; activefontsettings.justify = lefttext; if (mode50) settxt50mode (); _settextcolor (7); _setbkcolor (0); clearscreen (); char creat_edit ; if ( argc < 2 ) { printf ("\n create a new object or edit an existent one ? \n"); creat_edit = 0; yn_switch (" create ", " edit ", 0, 1, creat_edit); } else creat_edit = 1; if (creat_edit==0) { // creat new object clearscreen (); printf ("\n enter filename (without extension)\n"); stredit2 (datfile.name, 9, 255,255); strcat (datfile.name, ".obl"); ft->terrain_and = -1; ft->pictnum = 1; if (exist(datfile.name)) { sound (800); clearscreen(); _settextcolor (15); _setbkcolor (red); _settextposition (4, 5); char s[100]; sprintf ( s, " Filename <%s> already exists !! \n", datfile.name ); _outtext ( s ); _wait (); nosound (); settextmode ( 3 ); exit (0); } } else { // edit existing obl clearscreen (); if ( argc < 2 ) fileselect("*.obl", _A_NORMAL, datfile); else strcpy ( datfile.name, argv[1] ); clearscreen (); ft = loadobjecttype(datfile.name); printf ("\n change picture ? \n"); yn_switch ("", "", YES, NO, pict); } if (pict) { tfile pictfile; fileselect ("*.PCX", _A_NORMAL, pictfile); initsvga (0x101); ft->picture[0] = loadpcx2(pictfile.name); /* ft->pictnum = 64; ft->picture = new thexpic[64]; initsvga (0x101); loadpalette(); setvgapalette256 ( pal ); tkey ch; for ( int i = 0; i < 64; i++ ) do { ft->picture[i].flip = 0; bar ( 0, 0, 639, 479, 0 ); void* pic; int num; getbi3pict_double ( &num, &pic ); do { bar ( 0, 0, 639, 479, 255 ); for ( int j = 0; j < 6; j++ ) { int col; if ( i & ( 1 << j )) col = lightred; else col = red; bar ( 50 + j * 20, 400, 68 + j * 20, 420, col ); } putspriteimage ( 100, 100, pic ); ch = r_key(); if ( ch == ct_x ) { void* buf = new char[ imagesize ( 0, 0, fieldxsize, fieldysize ) ]; flippict ( pic, buf , 1 ); pic = buf; ft->picture[i].flip ^= 1; } if ( ch == ct_y ) { void* buf = new char[ imagesize ( 0, 0, fieldxsize, fieldysize ) ]; flippict ( pic, buf , 2 ); pic = buf; ft->picture[i].flip ^= 2; } } while ( ch != ct_enter && ch != ct_esc ); ft->picture[i].picture = pic; ft->picture[i].bi3pic = num; } while ( ch != ct_enter ); */ /* { int found = 0; int k = i; int flip = 0; do { for ( int j = 0; j < 24; j++ ) if ( bip[j] == k ) { loadbi3pict_double ( offset+j, &ft->picture[i].picture ); ft->picture[i].bi3pic = offset+j; ft->picture[i].flip = flip; found = 1; } if ( !found && flip == 1) { int l = 0; k = i; if ( k & 8 ) l |= 1; if ( k & 4 ) l |= 2; if ( k & 2 ) l |= 4; if ( k & 1 ) l |= 8; if ( k & 32 ) l |= 16; if ( k & 16 ) l |= 32; flip <<= 1; k = l; } else if ( !found ) { int l = 0; if ( k & 1 ) l |= 1; if ( k & 32 ) l |= 2; if ( k & 16 ) l |= 4; if ( k & 8 ) l |= 8; if ( k & 4 ) l |= 16; if ( k & 2 ) l |= 32; flip |= 1; k = l; } } while ( !found ); loadbi3pict_double ( ft->picture[i].bi3pic, &ft->picture[i].picture ); void* buf = new char[ imagesize ( 0, 0, fieldxsize, fieldysize ) ]; if ( ft->picture[i].flip == 1 ) { flippict ( ft->picture[i].picture, buf , 1 ); delete ft->picture[i].picture; ft->picture[i].picture = buf; } if ( ft->picture[i].flip == 2 ) { flippict ( ft->picture[i].picture, buf , 2 ); delete ft->picture[i].picture; ft->picture[i].picture = buf; } if ( ft->picture[i].flip == 3 ) { flippict ( ft->picture[i].picture, buf , 2 ); flippict ( buf, ft->picture[i].picture, 1 ); delete buf; } bar ( 0, 0, 639, 479, 255 ); putimage ( 100, 100, ft->picture[i].picture ); showtext2 ( strr ( i ), 10, 10 ); _wait(); } */ } else { initsvga (0x101); putspriteimage( 50, 50, ft->picture[0] ); { tnfilestream mainstream ( "palette.pal" , 1); mainstream.readdata( (char*) pal, sizeof(pal)); } setvgapalette256(pal); _wait(); } settxt50mode(); printf ("\n ID : \n"); num_ed ( ft->id , 0, maxint); printf ("\n terrain AND : \n"); bitselect ( ft->terrain_and, cbodenarten, cbodenartennum); printf ("\n terrain OR : \n"); bitselect ( ft->terrain_or , cbodenarten, cbodenartennum); printf ("\n attackbonus_plus : \n"); num_ed ( ft->attackbonus_plus , minint, maxint); printf ("\n attackbonus_abs : \n"); num_ed ( ft->attackbonus_abs , minint, maxint); printf ("\n defensebonus_plus : \n"); num_ed ( ft->defensebonus_plus , minint, maxint); printf ("\n defensebonus_abs : \n"); num_ed ( ft->defensebonus_abs , minint, maxint); printf ("\n basicjamming_plus : \n"); num_ed ( ft->basicjamming_plus , minint, maxint); printf ("\n basicjamming_abs : \n"); num_ed ( ft->basicjamming_abs , minint, maxint); printf ("\n armor : \n"); num_ed ( ft->armor , 0, maxint); printf ("\n height : \n"); num_ed ( ft->height , 0, maxint); printf ("\n production cost material : \n"); num_ed ( ft->buildcost.material , 0, maxint); printf ("\n production cost fuel : \n"); num_ed ( ft->buildcost.fuel, 0, maxint); printf ("\n production cost movement : \n"); num_ed ( ft->build_movecost, 0, maxint); printf ("\n removal cost material : \n"); num_ed ( ft->removecost.material , 0, maxint); printf ("\n removal cost fuel : \n"); num_ed ( ft->removecost.fuel, 0, maxint); printf ("\n removal cost movement : \n"); num_ed ( ft->remove_movecost, 0, maxint); printf ("\n name of object \n"); stredit (ft->name, 21, 255,255); { printf ("\n link automatically with neighbouring fields? \n"); char c = ft->no_autonet; yn_switch (" yes ", " no ", 0, 1, c ); ft->no_autonet = c; } ft->buildcost.energy = 0; ft->removecost.energy = 0; { for (int j=0; j< cmovemalitypenum; j ++) printf(" %i : %s \n", j, cmovemalitypes[j] ); printf ("\n movemalus_plus_count" ); num_ed (ft->movemalus_plus_count, 0, cmovemalitypenum ); ft->movemalus_plus = (char*) realloc ( ft->movemalus_plus, ft->movemalus_plus_count ); printf ( " 0 for default \n"); for (j=0; j< ft->movemalus_plus_count; j++) { printf(" %i : %s \n", j, cmovemalitypes[j] ); num_ed ( ft->movemalus_plus[j], 0, 255 ); } /* endfor */ }{ for (int j=0; j< cmovemalitypenum; j ++) printf(" %i : %s \n", j, cmovemalitypes[j] ); printf ("\n movemalus_abs_count " ); num_ed (ft->movemalus_abs_count, 0, cmovemalitypenum ); ft->movemalus_abs = (char*) realloc ( ft->movemalus_abs, ft->movemalus_abs_count ); printf ( " 0 for default \n"); for (j=0; j< ft->movemalus_abs_count; j++) { printf(" %i : %s \n", j, cmovemalitypes[j] ); num_ed ( ft->movemalus_abs[j], 0, 255 ); } /* endfor */ } { tn_file_buf_stream mainstream (datfile.name,2); writeobject ( ft, &mainstream, 0 ); } } /* endtry */ catch ( tfileerror err ) { printf("\nfatal error accessing file %s \n", err.filename ); return 1; } /* endcatch */ catch ( terror ) { printf("\na fatal exception occured\n" ); return 2; } /* endcatch */ clearscreen(); if (mode50) _setvideomode (_TEXTC80); return 0; } void * loadpcx2(char * filestring) { void *p = NULL; byte b; initsvga(0x101); b = loadpcxxy(filestring, 1, 0,0); if (b == 0) { p = malloc( 10000 ); getimage(0,0,49,49,p); _wait(); } return p; }