diff --git a/about.c b/about.c index ea40d03..abd572c 100644 --- a/about.c +++ b/about.c @@ -21,9 +21,9 @@ void about(tb1_state *game_state) vmwClearScreen(target1,0); vmwLoadPicPacked(0,0,target2,1,1, - tb1_data_file("register.tb1",game_state->path_to_data)); + tb1_data_file("./about/register.tb1",game_state->path_to_data)); vmwLoadPicPacked(0,0,target1,1,0, /* Load Palette */ - tb1_data_file("register.tb1",game_state->path_to_data)); + tb1_data_file("./about/register.tb1",game_state->path_to_data)); while ((ch!=VMW_ESCAPE)&&(ch!='q')){ while(( (ch=vmwGetInput())==0) && (firstime)); diff --git a/data/register.tb1 b/data/about/register.tb1 similarity index 100% rename from data/register.tb1 rename to data/about/register.tb1 diff --git a/data/hiscore.tb1 b/data/hiscore.tb1 index 6b5d2fb..083d0b3 100644 --- a/data/hiscore.tb1 +++ b/data/hiscore.tb1 @@ -5,9 +5,9 @@ Chipper Kevin Leonard Lizann +VINCECOOL +Vinnels Pete -Vinnie -joebob 5000 4500 4000 @@ -15,6 +15,6 @@ joebob 3000 2500 2000 +1570 +1540 1500 -1200 -1160 diff --git a/data/moon2.tb1 b/data/level1/moon2.tb1 similarity index 100% rename from data/moon2.tb1 rename to data/level1/moon2.tb1 diff --git a/data/ships.tb1 b/data/level1/ships.tb1 similarity index 100% rename from data/ships.tb1 rename to data/level1/ships.tb1 diff --git a/data/tbshapes.tb1 b/data/level1/tbshapes.tb1 similarity index 100% rename from data/tbshapes.tb1 rename to data/level1/tbshapes.tb1 diff --git a/data/viewscr.tb1 b/data/level1/viewscr.tb1 similarity index 100% rename from data/viewscr.tb1 rename to data/level1/viewscr.tb1 diff --git a/data/level2.dat b/data/level2/level2.dat similarity index 100% rename from data/level2.dat rename to data/level2/level2.dat diff --git a/data/tbaship.tb1 b/data/level2/tbaship.tb1 similarity index 100% rename from data/tbaship.tb1 rename to data/level2/tbaship.tb1 diff --git a/data/tbl2ship.tb1 b/data/level2/tbl2ship.tb1 similarity index 100% rename from data/tbl2ship.tb1 rename to data/level2/tbl2ship.tb1 diff --git a/data/tbash.tb1 b/data/level3/tbash.tb1 similarity index 100% rename from data/tbash.tb1 rename to data/level3/tbash.tb1 diff --git a/data/tbconsol.tb1 b/data/level3/tbconsol.tb1 similarity index 100% rename from data/tbconsol.tb1 rename to data/level3/tbconsol.tb1 diff --git a/data/tbl3intr.tb1 b/data/level3/tbl3intr.tb1 similarity index 100% rename from data/tbl3intr.tb1 rename to data/level3/tbl3intr.tb1 diff --git a/data/tblev3.tb1 b/data/level3/tblev3.tb1 similarity index 100% rename from data/tblev3.tb1 rename to data/level3/tblev3.tb1 diff --git a/data/tbpit.tb1 b/data/level3/tbpit.tb1 similarity index 100% rename from data/tbpit.tb1 rename to data/level3/tbpit.tb1 diff --git a/data/tbtract.tb1 b/data/level3/tbtract.tb1 similarity index 100% rename from data/tbtract.tb1 rename to data/level3/tbtract.tb1 diff --git a/data/level4.dat b/data/level4/level4.dat similarity index 100% rename from data/level4.dat rename to data/level4/level4.dat diff --git a/data/tbeerm.tb1 b/data/level4/tbeerm.tb1 similarity index 100% rename from data/tbeerm.tb1 rename to data/level4/tbeerm.tb1 diff --git a/data/vmwfan.mod b/data/music/vmwfan.mod similarity index 100% rename from data/vmwfan.mod rename to data/music/vmwfan.mod diff --git a/data/weave1.mod b/data/music/weave1.mod similarity index 100% rename from data/weave1.mod rename to data/music/weave1.mod diff --git a/data/tb_ahh.wav b/data/sound/tb_ahh.wav similarity index 100% rename from data/tb_ahh.wav rename to data/sound/tb_ahh.wav diff --git a/data/tb_bonk.wav b/data/sound/tb_bonk.wav similarity index 100% rename from data/tb_bonk.wav rename to data/sound/tb_bonk.wav diff --git a/data/tb_cc.wav b/data/sound/tb_cc.wav similarity index 100% rename from data/tb_cc.wav rename to data/sound/tb_cc.wav diff --git a/data/tb_click.wav b/data/sound/tb_click.wav similarity index 100% rename from data/tb_click.wav rename to data/sound/tb_click.wav diff --git a/data/tb_kapow.wav b/data/sound/tb_kapow.wav similarity index 100% rename from data/tb_kapow.wav rename to data/sound/tb_kapow.wav diff --git a/data/tb_ow.wav b/data/sound/tb_ow.wav similarity index 100% rename from data/tb_ow.wav rename to data/sound/tb_ow.wav diff --git a/data/tb_scream.wav b/data/sound/tb_scream.wav similarity index 100% rename from data/tb_scream.wav rename to data/sound/tb_scream.wav diff --git a/data/tb_zrrp.wav b/data/sound/tb_zrrp.wav similarity index 100% rename from data/tb_zrrp.wav rename to data/sound/tb_zrrp.wav diff --git a/data/tbchief.tb1 b/data/story/tbchief.tb1 similarity index 100% rename from data/tbchief.tb1 rename to data/story/tbchief.tb1 diff --git a/data/tbcobj.tb1 b/data/story/tbcobj.tb1 similarity index 100% rename from data/tbcobj.tb1 rename to data/story/tbcobj.tb1 diff --git a/data/tbcrash.tb1 b/data/story/tbcrash.tb1 similarity index 100% rename from data/tbcrash.tb1 rename to data/story/tbcrash.tb1 diff --git a/data/tbgorg.tb1 b/data/story/tbgorg.tb1 similarity index 100% rename from data/tbgorg.tb1 rename to data/story/tbgorg.tb1 diff --git a/data/tbma1.tb1 b/data/story/tbma1.tb1 similarity index 100% rename from data/tbma1.tb1 rename to data/story/tbma1.tb1 diff --git a/data/tbsobj.tb1 b/data/story/tbsobj.tb1 similarity index 100% rename from data/tbsobj.tb1 rename to data/story/tbsobj.tb1 diff --git a/data/data_files_here b/data/tb1_data_files_here similarity index 100% rename from data/data_files_here rename to data/tb1_data_files_here diff --git a/graphic_tools.c b/graphic_tools.c index bfacb42..7e4afa8 100644 --- a/graphic_tools.c +++ b/graphic_tools.c @@ -109,6 +109,9 @@ char *vmwGrInput(tb1_state *game_state,int x,int y,int howlong,int forecol,int b ch=-1; + vmwTextXY(" ",x,y,forecol,backcol,1,tb1_font,vis); + vmwBlitMemToDisplay(game_state->graph_state,vis); + while (ch!=VMW_ENTER) { while ((ch=vmwGetInput())==0) usleep(30); diff --git a/level_1.c b/level_1.c index 63e78b5..ca25f15 100644 --- a/level_1.c +++ b/level_1.c @@ -79,7 +79,7 @@ void beforeboss(tb1_state *game_state) vmwClearKeyboardBuffer(); vmwLoadPicPacked(0,0,game_state->virtual_3,0,1, - tb1_data_file("viewscr.tb1",game_state->path_to_data)); + tb1_data_file("level1/viewscr.tb1",game_state->path_to_data)); vmwClearScreen(game_state->virtual_1,0); vmwArbitraryCrossBlit(game_state->virtual_3,0,5,58,37, game_state->virtual_1,10,10); @@ -130,7 +130,7 @@ void afterboss(tb1_state *game_state) tb1_font=game_state->graph_state->default_font; vmwLoadPicPacked(0,0,game_state->virtual_3,0,1, - tb1_data_file("viewscr.tb1",game_state->path_to_data)); + tb1_data_file("level1/viewscr.tb1",game_state->path_to_data)); vmwDrawBox(0,0,320,200,0,game_state->virtual_1); vmwArbitraryCrossBlit(game_state->virtual_3,0,42,58,37, game_state->virtual_1,10,10); @@ -362,14 +362,14 @@ void levelone(tb1_state *game_state) { /* Load Sprites */ grapherror=vmwLoadPicPacked(0,0,virtual_1,1,1, - tb1_data_file("ships.tb1",game_state->path_to_data)); + tb1_data_file("level1/ships.tb1",game_state->path_to_data)); bigship1=vmwGetSprite(0,0,48,30,virtual_1); bigship2=vmwGetSprite(0,32,48,30,virtual_1); bigship3=vmwGetSprite(0,64,48,30,virtual_1); grapherror=vmwLoadPicPacked(0,0,virtual_1,1,1, - tb1_data_file("tbshapes.tb1",game_state->path_to_data)); + tb1_data_file("level1/tbshapes.tb1",game_state->path_to_data)); for(j=0;j<2;j++) for(i=0;i<10;i++) @@ -641,9 +641,9 @@ void littleopener(tb1_state *game_state) vmwClearScreen(game_state->virtual_2,0); vmwLoadPicPacked(0,0,game_state->virtual_2,1,1, - tb1_data_file("moon2.tb1",game_state->path_to_data)); + tb1_data_file("level1/moon2.tb1",game_state->path_to_data)); vmwLoadPicPacked(0,0,game_state->virtual_1,1,0, /* Load palette */ - tb1_data_file("moon2.tb1",game_state->path_to_data)); + tb1_data_file("level1/moon2.tb1",game_state->path_to_data)); ship1=vmwGetSprite(9,178,15,18,game_state->virtual_2); ship2=vmwGetSprite(30,178,15,18,game_state->virtual_2); @@ -679,6 +679,6 @@ void littleopener(tb1_state *game_state) vmwDrawBox(0,0,320,200,0,game_state->virtual_1); vmwLoadPicPacked(0,0,game_state->virtual_1,1,0, /* Restore Palette */ - tb1_data_file("tbgorg.tb1",game_state->path_to_data)); + tb1_data_file("tbomb1.tb1",game_state->path_to_data)); } diff --git a/level_2.c b/level_2.c index df9f385..83afdb5 100644 --- a/level_2.c +++ b/level_2.c @@ -93,12 +93,9 @@ void leveltwoengine(tb1_state *game_state) game_state->begin_score=game_state->score; game_state->begin_shields=game_state->shields; - printf("Starting level 2\n"); fflush(stdout); - - /* Load Sprites */ grapherror=vmwLoadPicPacked(0,0,virtual_1,1,1, - tb1_data_file("ships.tb1", + tb1_data_file("level1/ships.tb1", game_state->path_to_data)); ship_shape[0]=vmwGetSprite(0,0,48,30,virtual_1); @@ -107,21 +104,19 @@ void leveltwoengine(tb1_state *game_state) if (game_state->level==2) vmwLoadPicPacked(0,0,virtual_1,1,1, - tb1_data_file("tbaship.tb1",game_state->path_to_data)); + tb1_data_file("level2/tbaship.tb1",game_state->path_to_data)); if (game_state->level==4) vmwLoadPicPacked(0,0,virtual_1,1,1, - tb1_data_file("tbeerm.tb1",game_state->path_to_data)); + tb1_data_file("level4/tbeerm.tb1",game_state->path_to_data)); for(j=0;j<4;j++) for(i=0;i<10;i++) shape_table[j*10+i]=vmwGetSprite(1+i*21,1+j*11,20,10,virtual_1); - printf("Sprites Loaded\n"); fflush(stdout); - /* Load Background Data */ if (game_state->level==2) - f=fopen(tb1_data_file("level2.dat",game_state->path_to_data),"r"); + f=fopen(tb1_data_file("level2/level2.dat",game_state->path_to_data),"r"); if (game_state->level==4) - f=fopen(tb1_data_file("level4.dat",game_state->path_to_data),"r"); + f=fopen(tb1_data_file("level4/level4.dat",game_state->path_to_data),"r"); if (f==NULL) printf("ERROR! Could't open level %d data!\n",game_state->level); @@ -442,7 +437,13 @@ void leveltwoengine(tb1_state *game_state) /*printf("%i\n",rows_goneby);*/ if (rows_goneby>1950) { - printf("%i\n",rows_goneby); +// printf("%i\n",rows_goneby); + coolbox(35,85,215,110,1,virtual_1); + vmwTextXY("TO BE CONTINUED...",55,85,4,7,0,tb1_font,virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,virtual_1); + pauseawhile(10); + + /* clearkeyboardbuffer; pauseawhile(200); @@ -562,22 +563,17 @@ void leveltwoengine(tb1_state *game_state) -void littleopener2() -{ -// char tempst[300]; -/* - ggiSetGCForeground(vis,tb1_pal[0]); - ggiDrawBox(vis,0,0,320,200); - ggiSetGCForeground(vaddr,tb1_pal[0]); - ggiDrawBox(vaddr,0,0,320,200); - GGILoadPicPacked(0,0,vis,1,1, - tb1_data_file("tbl2ship.tb1",(char *)tempst), - (ggi_color *)&eight_bit_pal, - (ggi_pixel *)&tb1_pal,color_depth); - VMWtextxy("Hmmmm... ",10,10,tb1_pal[4],tb1_pal[0],0,tb1_font,vis); - VMWtextxy("This Might Be Harder Than I Thought.",10,20,tb1_pal[4],tb1_pal[0],0,tb1_font,vis); +void littleopener2(tb1_state *game_state) { + + vmwDrawBox(0,0,319,199,0,game_state->virtual_1); + vmwLoadPicPacked(0,0,game_state->virtual_1,1,1, + tb1_data_file("level2/tbl2ship.tb1",game_state->path_to_data)); + vmwTextXY("Hmmmm... ",10,10,4,0,0,game_state->graph_state->default_font, + game_state->virtual_1); + vmwTextXY("This Might Be Harder Than I Thought.",10,20,4,0,0, + game_state->graph_state->default_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(13); - ggiSetGCForeground(vis,tb1_pal[0]); - ggiDrawBox(vis,0,0,320,200); - */ + vmwDrawBox(0,0,319,199,0,game_state->virtual_1); + } diff --git a/levels.h b/levels.h index 2d9e4c7..7d032d9 100644 --- a/levels.h +++ b/levels.h @@ -1,4 +1,5 @@ void levelone(tb1_state *game_state); -void littleopener(); +void littleopener(tb1_state *game_state); void leveltwoengine(tb1_state *game_state); -void littleopener2(); +void littleopener2(tb1_state *game_state); + diff --git a/playgame.c b/playgame.c index 50d22f3..5162181 100644 --- a/playgame.c +++ b/playgame.c @@ -23,7 +23,7 @@ void playthegame(tb1_state *game_state) if (game_state->level==1) { levelone(game_state); -// if(level==2) littleopener2(); + if (game_state->level==2) littleopener2(game_state); } if (game_state->level==2) { leveltwoengine(game_state); @@ -51,7 +51,7 @@ void playthegame(tb1_state *game_state) vmwTextXY("ENTER YOUR NAME (10 Chars)",30,90,0,7,0, game_state->graph_state->default_font,game_state->virtual_1); vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); - hiname=vmwGrInput(game_state,110,110,10,11,7,game_state->graph_state->default_font, + hiname=vmwGrInput(game_state,110,110,10,11,0,game_state->graph_state->default_font, game_state->virtual_1); write_hs_list(game_state,game_state->score,hiname,0); } diff --git a/sound.c b/sound.c index 6790d5d..080e688 100644 --- a/sound.c +++ b/sound.c @@ -13,14 +13,14 @@ static Mix_Music *music; static Mix_Chunk *game_fx[NUM_GAME_FX]; static char *game_fx_names[] = { - "tb_ahh.wav", - "tb_cc.wav", - "tb_kapow.wav", - "tb_scream.wav", - "tb_bonk.wav", - "tb_click.wav", - "tb_ow.wav", - "tb_zrrp.wav" + "sound/tb_ahh.wav", + "sound/tb_cc.wav", + "sound/tb_kapow.wav", + "sound/tb_scream.wav", + "sound/tb_bonk.wav", + "sound/tb_click.wav", + "sound/tb_ow.wav", + "sound/tb_zrrp.wav" }; void loadFX(char *path_to_data) { diff --git a/story.c b/story.c index ee83f1e..591aeda 100644 --- a/story.c +++ b/story.c @@ -1,4 +1,5 @@ #include +#include /* for usleep */ #include "svmwgraph/svmwgraph.h" #include "tb1_state.h" @@ -7,92 +8,69 @@ #include "sound.h" + vmwSprite *bigFlame1,*bigFlame2,*smallFlame1,*smallFlame2; + vmwSprite *rent,*truck1,*truck2,*barge; + vmwSprite *explosion1,*explosion2; + + + +void doflames(tb1_state *game_state) { + + static int flames=0; + static char alienchar=34; + char tempst[5]; + + if (flames) { + vmwPutSprite(bigFlame1,213,100,game_state->virtual_1); + vmwPutSpriteNonTransparent(smallFlame2,105,90,game_state->virtual_1); + vmwPutSpriteNonTransparent(smallFlame1,151,71,game_state->virtual_1); + vmwPutSpriteNonTransparent(smallFlame2,218,72,game_state->virtual_1); + } + else { + vmwPutSprite(bigFlame2,213,100,game_state->virtual_1); + vmwPutSpriteNonTransparent(smallFlame1,105,90,game_state->virtual_1); + vmwPutSpriteNonTransparent(smallFlame2,151,71,game_state->virtual_1); + vmwPutSpriteNonTransparent(smallFlame1,218,72,game_state->virtual_1); + sprintf(tempst,"%c",alienchar); + vmwTextXY(tempst,10,10,12,0,1,game_state->graph_state->default_font,game_state->virtual_1); + alienchar++; + if (alienchar>44) alienchar=34; + } + flames=(!flames); +} + void story(tb1_state *game_state) { - int error; + int i; int xtemp,ytemp; int thrustcol; float thrust; char tempch; - int alienchar; - int cycles; + int cycles,to_clear; vmwFont *tb1_font; tb1_font=game_state->graph_state->default_font; -/* -procedure doflames; -begin - - if flames=true then begin - putshape(bigflame1off,vaddr,27,17,213,100); - putshapeover(sflame2off,vaddr,4,4,105,90); - putshapeover(sflame1off,vaddr,4,4,151,71); - putshapeover(sflame2off,vaddr,4,4,218,72); - end - else - begin - putshape(bigflame2off,vaddr,27,17,213,100); - putshapeover(sflame1off,vaddr,4,4,105,90); - putshapeover(sflame2off,vaddr,4,4,151,71); - putshapeover(sflame1off,vaddr,4,4,218,72); - outtextxy(chr(alienchar),10,10,12,0,vaddr,true); - inc(alienchar); - if alienchar>44 then alienchar:=34; - end; - flipd320(vaddr,vga); - vdelay(5); - flames:=not(flames); -end; - -procedure puttruck(xp,yp,frame:integer;where:word); -var xtemp,into,ytemp:integer; - col:byte; -begin - for into:=0 to 7 do begin - if(into+yp>=172) then - if frame=0 then putshapeline(truck1off,where,6,8,xp,yp,into) - else putshapeline(truck2off,where,6,8,xp,yp,into); - end; -end; -*/ vmwLoadPicPacked(0,0,game_state->virtual_2,1,1, - tb1_data_file("tbsobj.tb1",game_state->path_to_data)); - /* - for ytemp:=0 to 18 do - for xtemp:=0 to 26 do begin - ShapeTable1^[((ytemp*27)+xtemp)+bigflame1off]:=getpixel(xtemp,ytemp+2,vaddr); - ShapeTable1^[((ytemp*27)+xtemp)+bigflame2off]:=getpixel(xtemp,ytemp+21,vaddr); - end; - for ytemp:=0 to 18 do - for xtemp:=0 to 15 do begin - ShapeTable1^[((ytemp*16)+xtemp)+explo1off]:=getpixel(127+xtemp,ytemp+100,vaddr); - ShapeTable1^[((ytemp*16)+xtemp)+explo2off]:=getpixel(148+xtemp,ytemp+100,vaddr); - end; - for ytemp:=0 to 6 do - for xtemp:=0 to 15 do - ShapeTable1^[((ytemp*16)+xtemp)+rent1off]:=getpixel(168+xtemp,ytemp+100,vaddr); - - for ytemp:=0 to 4 do - for xtemp:=0 to 3 do begin - ShapeTable1^[((ytemp*4)+xtemp)+sflame1off]:=getpixel(xtemp,ytemp+43,vaddr); - ShapeTable1^[((ytemp*4)+xtemp)+sflame2off]:=getpixel(xtemp,ytemp+47,vaddr); - end; - - for ytemp:=0 to 18 do - for xtemp:=0 to 15 do - ShapeTable1^[((ytemp*16)+xtemp)+bargeoff]:=getpixel(xtemp+65,ytemp+100,vaddr); - - for ytemp:=0 to 8 do - for xtemp:=0 to 5 do begin - ShapeTable1^[((ytemp*6)+xtemp)+truck1off]:=getpixel(xtemp+85,ytemp+100,vaddr); - ShapeTable1^[((ytemp*6)+xtemp)+truck2off]:=getpixel(xtemp+95,ytemp+100,vaddr); - end; -*/ + tb1_data_file("story/tbsobj.tb1",game_state->path_to_data)); + /* Load up the sprites! */ + bigFlame1=vmwGetSprite(0,2,26,18,game_state->virtual_2); + bigFlame2=vmwGetSprite(0,21,26,18,game_state->virtual_2); + + explosion1=vmwGetSprite(127,100,15,18,game_state->virtual_2); + explosion2=vmwGetSprite(148,100,15,18,game_state->virtual_2); + + rent=vmwGetSprite(166,100,15,6,game_state->virtual_2); + smallFlame1=vmwGetSprite(0,43,3,4,game_state->virtual_2); + smallFlame2=vmwGetSprite(0,47,3,4,game_state->virtual_2); + barge=vmwGetSprite(65,100,15,18,game_state->virtual_2); + truck1=vmwGetSprite(85,100,6,8,game_state->virtual_2); + truck2=vmwGetSprite(95,100,6,8,game_state->virtual_2); + /******FIRST MESSAGE********/ vmwClearScreen(game_state->virtual_1,0); vmwTextXY("THE STORY SO FAR...",20,20,4,0,0,tb1_font,game_state->virtual_1); @@ -102,7 +80,7 @@ end; vmwClearScreen(game_state->virtual_1,0); vmwLoadPicPacked(0,0,game_state->virtual_2,1,1, - tb1_data_file("tbcobj.tb1",game_state->path_to_data)); + tb1_data_file("story/tbcobj.tb1",game_state->path_to_data)); vmwArbitraryCrossBlit(game_state->virtual_2,129,56,49,132, game_state->virtual_1,10,10); @@ -143,7 +121,7 @@ end; pauseawhile(12); vmwLoadPicPacked(0,0,game_state->virtual_1,1,1, - tb1_data_file("tbchief.tb1",game_state->path_to_data)); + tb1_data_file("story/tbchief.tb1",game_state->path_to_data)); /* Save the area where the error will go */ vmwArbitraryCrossBlit(game_state->virtual_1,115,55,91,59, @@ -154,7 +132,7 @@ end; vmwTextXY("Ahhh.... Mr. Bombem.... ",1,1,15,0,0,tb1_font,game_state->virtual_1); vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); if (game_state->sound_enabled) playGameFX(0); - pauseawhile(2); + pauseawhile(6); if (game_state->sound_enabled) playGameFX(2); /* Show fake error message */ @@ -188,8 +166,9 @@ end; /******BARGE TAKING OFF***********/ + vmwClearScreen(game_state->virtual_2,0); vmwLoadPicPacked(0,0,game_state->virtual_2,1,1, - tb1_data_file("tbma1.tb1",game_state->path_to_data)); + tb1_data_file("story/tbma1.tb1",game_state->path_to_data)); vmwSmallTextXY("MY WIFE AND I FOUNDED",212,3,14,0,0,tb1_font,game_state->virtual_2); vmwSmallTextXY("THIS BASE IN 2008.",212,9,14,0,0,tb1_font,game_state->virtual_2); @@ -204,186 +183,227 @@ end; vmwSmallTextXY("THE LAST LAUNCH EIGHT",212,66,11,0,0,tb1_font,game_state->virtual_2); vmwSmallTextXY("YEARS AGO.",212,72,11,0,0,tb1_font,game_state->virtual_2); - vmwFlipVirtual(game_state->virtual_1,game_state->virtual_2,320,200); - -/* putshape(bargeoff,vaddr,16,18,141,157);*/ - /* vmwCrossBlit(plb_vis->write,plb_vaddr->read,plb_vis->stride,200);*/ - vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); - pauseawhile(7); + vmwFlipVirtual(game_state->virtual_1,game_state->virtual_2,320,200); -#if 0 -/* + vmwPutSprite(barge,141,157,game_state->virtual_1); + + + /* vmwCrossBlit(game_state->virtual_1,plb_vaddr->read,plb_vis->stride,200);*/ + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + pauseawhile(6); - for ytemp:=191 downto 164 do begin - if ytemp>=172 then blockmove(145,ytemp,152,ytemp+10,vaddr2,145,ytemp,vaddr) - else blockmove(145,172,152,182,vaddr2,145,172,vaddr); - puttruck(145,ytemp,ytemp mod 2,vaddr); - pauseawhile(7); - if keypressed then if readkey=#27 then exit; - flipd320(vaddr,vga); - end; - - pauseawhile(20); - flipd320(vaddr2,vaddr); - putshape(bargeoff,vaddr,16,18,141,157); - thrustcol:=0; - ytemp:=157; - thrust:=0; - while ytemp>-25 do begin - thrust:=thrust+0.05; - if thrustcol<63 then inc(thrustcol); - blockmove(141,ytemp,171,ytemp+30,vaddr2,141,ytemp,vaddr); - for i:=1 to 17 do - if ytemp+i>=0 then - putshapeline(bargeoff,vaddr,16,18,141,ytemp,i); - pauseawhile(5); - if keypressed then if readkey=#27 then exit; - pal(250,thrustcol,0,0); - flipd320(vaddr,vga); - ytemp:=ytemp-round(thrust); - end; -*/ - pauseawhile(5); - - - /****SECOND CHIEF*******/ - ggiSetGCForeground(vis,0]); - ggiDrawBox(vis,0,0,320,200); - GGILoadPicPacked(0,0,vaddr2,1,1, - tb1_data_file("tbcobj.tb1",(char *)tempst), - (ggi_color *)&eight_bit_pal, - (ggi_pixel *)&tb1_pal,color_depth); - GGILoadPicPacked(0,0,vis,1,1, - tb1_data_file("tbchief.tb1",(char *)tempst), - (ggi_color *)&eight_bit_pal, - (ggi_pixel *)&tb1_pal,color_depth); -/* vmwArbitraryCrossBlit(plb_vaddr2->read,7,104,90,21, - plb_vis->write,6,174,plb_vis->stride, - stride_factor); - */ - vmwTextXY("You might wonder why this is important.",1,1,15],0],1,tb1_font,virtual_1); - pauseawhile(6); - vmwTextXY("Last week we received a message. ",1,1,15],0],1,tb1_font,virtual_1); - pauseawhile(6); - vmwTextXY("It is of extra-terrestrial origin. ",1,1,15],0],1,tb1_font,virtual_1); - pauseawhile(6); - vmwTextXY("Watch the screen. ",1,1,15],0],1,tb1_font,virtual_1); + /* Roll the truck up to the barge */ + for(ytemp=190;ytemp>=164;ytemp--) { - /*vmwArbitraryCrossBlit(plb_vaddr2->read,210,136,85,59, - plb_vis->write,210,136,plb_vis->stride, - stride_factor);*/ + if (ytemp>=172) + vmwArbitraryCrossBlit(game_state->virtual_2, + 145,ytemp,7,10, + game_state->virtual_1,145,ytemp); + else + vmwArbitraryCrossBlit(game_state->virtual_2, + 145,172,7,10, + game_state->virtual_1,145,172); + + if (ytemp%2) vmwPutPartialSprite(game_state->virtual_1, + truck1,145,ytemp, + 0,319,172,199); + else vmwPutPartialSprite(game_state->virtual_1, + truck2,145,ytemp, + 0,319,172,199); + + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + + usleep(80000); + } + pauseawhile(2); + + /* Have the barge take off */ + vmwFlipVirtual(game_state->virtual_1,game_state->virtual_2,320,200); + + vmwPutSprite(barge,141,157,game_state->virtual_1); + thrustcol=0; + ytemp=157; + to_clear=0; + thrust=0; + while (ytemp> -25) { + thrust+=0.15; + if (thrustcol<62) thrustcol++; + to_clear=ytemp; + if (ytemp<0) to_clear=0; + vmwArbitraryCrossBlit(game_state->virtual_2,141,to_clear,30,30, + game_state->virtual_1,141,to_clear); + for(i=1;i<17;i++) { + vmwPutPartialSprite(game_state->virtual_1, + barge,141,ytemp, + 0,319,0,199); + } + usleep(50000); + game_state->virtual_1->palette[250]=thrustcol*0x1000; + ytemp=ytemp-(int)thrust; + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + } + pauseawhile(5); + + + vmwClearScreen(game_state->virtual_2,0); + + /****SECOND CHIEF*******/ + vmwLoadPicPacked(0,0,game_state->virtual_2,1,1, + tb1_data_file("story/tbcobj.tb1",game_state->path_to_data)); + vmwLoadPicPacked(0,0,game_state->virtual_1,1,1, + tb1_data_file("story/tbchief.tb1",game_state->path_to_data)); + vmwArbitraryCrossBlit(game_state->virtual_2,7,104,90,21, + game_state->virtual_1,6,174); + vmwTextXY("You might wonder why this is important.", + 1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + pauseawhile(6); + vmwTextXY("Last week we received a message. ", + 1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + pauseawhile(6); + vmwTextXY("It is of extra-terrestrial origin. ", + 1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + pauseawhile(6); + vmwTextXY("Watch the screen. ", + 1,1,15,0,1,tb1_font,game_state->virtual_1); + + vmwArbitraryCrossBlit(game_state->virtual_2,210,136,85,59, + game_state->virtual_1,210,136); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(4); /******ALIEN DELEGATION*****/ - GGILoadPicPacked(0,0,vaddr2,1,1, - tb1_data_file("tbcrash.tb1",(char *)tempst), - (ggi_color *)&eight_bit_pal, - (ggi_pixel *)&tb1_pal,color_depth); - - /*alienchar:=34; - flipd320(vaddr2,vaddr); - flipd320(vaddr,vga); - putshape(bargeoff,vaddr,16,18,97,180); - unfade; - xtemp:=97; - ytemp:=181; - flames:=true; - while ytemp>118 do begin - blockmove(xtemp,ytemp,xtemp+20,ytemp+20,vaddr2,xtemp,ytemp,vaddr); - putshape(bargeoff,vaddr,16,18,xtemp,ytemp); - doflames; - dec(ytemp); - inc(xtemp); - pauseawhile(1); - if keypressed then if readkey=#27 then exit; - end; - blockmove(xtemp,ytemp,xtemp+30,ytemp+30,vaddr2,xtemp,ytemp,vaddr); - pal(0,63,63,63); - putshape(explo1off,vga,16,18,160,118); - pauseawhile(5); - if keypressed then if readkey=#27 then exit; - pal(0,0,0,0); - if sbeffects then startsound(sound[3],0,false); - for xtemp:=0 to 10 do begin - putshapeover(explo2off,vaddr,16,18,160,118); - doflames; - putshapeover(explo1off,vaddr,16,18,160,118); - doflames; - end; - blockmove(159,114,189,144,vaddr2,159,114,vaddr); - putshapeover(rent1off,vaddr,16,6,160,115); - flipd320(vaddr,vga); - cycles:=0; - repeat - doflames; - inc(cycles); - until ((keypressed) or (cycles>60)); - if keypressed then if readkey=#27 then exit; - */ + + /* Something is not quite right here */ +// vmwLoadPicPacked(0,0,game_state->virtual_2,1,1, +// tb1_data_file("story/tbcrash.tb1", +// game_state->path_to_data)); + vmwLoadPicPacked(0,0,game_state->virtual_1,1,1, + tb1_data_file("story/tbcrash.tb1", + game_state->path_to_data)); + vmwLoadPicPacked(0,0,game_state->virtual_1,1,0, + tb1_data_file("tbomb1.tb1", + game_state->path_to_data)); + + + vmwFlipVirtual(game_state->virtual_2,game_state->virtual_1,320,200); +// flipd320(vaddr,vga); + vmwPutSprite(barge,97,180,game_state->virtual_1); + xtemp=97; + ytemp=181; + + while (ytemp>118) { + vmwArbitraryCrossBlit(game_state->virtual_2,xtemp,ytemp,20,20, + game_state->virtual_1,xtemp,ytemp); + vmwPutSprite(barge,xtemp,ytemp,game_state->virtual_1); + doflames(game_state); + ytemp--; + xtemp++; + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + usleep(80000); + } + vmwArbitraryCrossBlit(game_state->virtual_2,xtemp,ytemp,30,30, + game_state->virtual_1,xtemp,ytemp); + game_state->virtual_1->palette[0]=0xffffff; + vmwPutSprite(explosion1,160,118,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + game_state->virtual_1->palette[0]=0; + usleep(80000); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + + if (game_state->sound_enabled) playGameFX(2); + for(xtemp=0;xtemp<10;xtemp++) { + vmwPutSprite(explosion2,160,118,game_state->virtual_1); + doflames(game_state); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + usleep(80000); + vmwPutSprite(explosion1,160,118,game_state->virtual_1); + doflames(game_state); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + usleep(80000); + } + vmwArbitraryCrossBlit(game_state->virtual_2,159,114,30,30, + game_state->virtual_1,159,114); + vmwPutSpriteNonTransparent(rent,160,118,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + + cycles=0; + while ( ((tempch=vmwGetInput())==0) && cycles<12) { + doflames(game_state); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + cycles++; + usleep(500000); + } /****ALIEN MESSAGE*****/ - GGILoadPicPacked(0,0,vis,1,1, - tb1_data_file("tbgorg.tb1",(char *)tempst), - (ggi_color *)&eight_bit_pal, - (ggi_pixel *)&tb1_pal,color_depth); - vmwTextXY("GREETINGS EARTHLINGS.",0,162,12],0],0,tb1_font,virtual_1); - vmwTextXY("I AM GORGONZOLA THE REPULSIVE.",0,171,12],0],0,tb1_font,virtual_1); - vmwTextXY("YOU HAVE MADE A BIG MISTAKE.",0,180,12],0],0,tb1_font,virtual_1); + vmwLoadPicPacked(0,0,game_state->virtual_1,1,1, + tb1_data_file("story/tbgorg.tb1",game_state->path_to_data)); + vmwTextXY("GREETINGS EARTHLINGS.",0,162,12,0,0,tb1_font,game_state->virtual_1); + vmwTextXY("I AM GORGONZOLA THE REPULSIVE.",0,171,12,0,0,tb1_font,game_state->virtual_1); + vmwTextXY("YOU HAVE MADE A BIG MISTAKE.",0,180,12,0,0,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(7); - vmwTextXY("YOUR SHIP FULL OF REFUSE HAS",0,162,12],0],1,tb1_font,virtual_1); - vmwTextXY("DAMAGED OUR OFFICIAL PEACE ",0,171,12],0],1,tb1_font,virtual_1); - vmwTextXY("ENVOY. IT WAS ON ITS WAY TO ",0,180,12],0],1,tb1_font,virtual_1); - vmwTextXY("YOUR PLANET. ",0,189,12],0],1,tb1_font,virtual_1); + vmwTextXY("YOUR SHIP FULL OF REFUSE HAS",0,162,12,0,1,tb1_font,game_state->virtual_1); + vmwTextXY("DAMAGED OUR OFFICIAL PEACE ",0,171,12,0,1,tb1_font,game_state->virtual_1); + vmwTextXY("ENVOY. IT WAS ON ITS WAY TO ",0,180,12,0,1,tb1_font,game_state->virtual_1); + vmwTextXY("YOUR PLANET. ",0,189,12,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(7); - vmwTextXY("IN AN IRONIC FORM OF RETALLIATION",0,162,12],0],1,tb1_font,virtual_1); - vmwTextXY("WE HAVE MADE YOUR TRASH EVIL AND",0,171,12],0],1,tb1_font,virtual_1); - vmwTextXY("TURNED IT AGAINST YOU. ",0,180,12],0],1,tb1_font,virtual_1); - vmwTextXY(" DIE EARTH SCUM! ",0,189,12],0],1,tb1_font,virtual_1); + vmwTextXY("IN AN IRONIC FORM OF RETALLIATION",0,162,12,0,1,tb1_font,game_state->virtual_1); + vmwTextXY("WE HAVE MADE YOUR TRASH EVIL AND",0,171,12,0,1,tb1_font,game_state->virtual_1); + vmwTextXY("TURNED IT AGAINST YOU. ",0,180,12,0,1,tb1_font,game_state->virtual_1); + vmwTextXY(" DIE EARTH SCUM! ",0,189,12,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(7); /****** THIRD CHIEF *******/ - GGILoadPicPacked(0,0,vaddr2,1,1, - tb1_data_file("tbcobj.tb1",(char *)tempst), - (ggi_color *)&eight_bit_pal, - (ggi_pixel *)&tb1_pal,color_depth); - GGILoadPicPacked(0,0,virtual_1,1,1, - tb1_data_file("tbchief.tb1",(char *)tempst), - (ggi_color *)&eight_bit_pal, - (ggi_pixel *)&tb1_pal,color_depth); - vmwArbitraryCrossBlit(plb_vaddr2->read,7,127,90,21, - plb_vis->write,6,174,plb_vis->stride, - stride_factor); + vmwLoadPicPacked(0,0,game_state->virtual_2,1,1, + tb1_data_file("story/tbcobj.tb1",game_state->path_to_data)); + vmwLoadPicPacked(0,0,game_state->virtual_1,1,1, + tb1_data_file("story/tbchief.tb1",game_state->path_to_data)); + vmwArbitraryCrossBlit(game_state->virtual_2,7,127,90,21, + game_state->virtual_1,6,174); - vmwTextXY("Tom, our radar detects approaching ",1,1,15],0],1,tb1_font,virtual_1); + vmwTextXY("Tom, our radar detects approaching ",1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(6); - vmwTextXY("objects. They are inside the ",1,1,15],0],1,tb1_font,virtual_1); + vmwTextXY("objects. They are inside the ",1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(6); - vmwTextXY("orbit of Jupiter. ",1,1,15],0],1,tb1_font,virtual_1); + vmwTextXY("orbit of Jupiter. ",1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(6); - vmwTextXY("You are our only hope! ",1,1,15],0],1,tb1_font,virtual_1); + vmwTextXY("You are our only hope! ",1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(6); - vmwTextXY("Will you fly our only spaceship ",1,1,15],0],1,tb1_font,virtual_1); + vmwTextXY("Will you fly our only spaceship ",1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(6); - vmwTextXY("and save the human race? ",1,1,15],0],1,tb1_font,virtual_1); + vmwTextXY("and save the human race? ",1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(6); - vmwArbitraryCrossBlit(plb_vaddr2->read,5,16,39,82, - plb_vis->write,146,59,plb_vis->stride, - stride_factor); - pauseawhile(1); - vmwArbitraryCrossBlit(plb_vaddr2->read,46,16,39,82, - plb_vis->write,146,59,plb_vis->stride, - stride_factor); - pauseawhile(1); - vmwArbitraryCrossBlit(plb_vaddr2->read,87,16,39,82, - plb_vis->write,146,59,plb_vis->stride, - stride_factor); - vmwTextXY("Scratch. Scratch. ",1,1,9],0],1,tb1_font,virtual_1); + vmwArbitraryCrossBlit(game_state->virtual_2,5,16,39,82, + game_state->virtual_1,146,59); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + usleep(500000); + vmwArbitraryCrossBlit(game_state->virtual_2,46,16,39,82, + game_state->virtual_1,146,59); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); + usleep(500000); + vmwArbitraryCrossBlit(game_state->virtual_2,87,16,39,82, + game_state->virtual_1,146,59); + vmwTextXY("Scratch. Scratch. ",1,1,9,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(5); - vmwTextXY("I knew you'd do it. Good Luck! ",1,1,15],0],1,tb1_font,virtual_1); + vmwTextXY("I knew you'd do it. Good Luck! ",1,1,15,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(6); - vmwTextXY(" ",1,1,9],0],1,tb1_font,virtual_1); + vmwTextXY(" ",1,1,9,0,1,tb1_font,game_state->virtual_1); + vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); pauseawhile(10); -#endif + } diff --git a/svmwgraph/sdl_svmwgraph.c b/svmwgraph/sdl_svmwgraph.c index 64498a8..a853f73 100644 --- a/svmwgraph/sdl_svmwgraph.c +++ b/svmwgraph/sdl_svmwgraph.c @@ -5,9 +5,16 @@ #include /* For atexit() */ /* Setup the Graphics */ -void *SDL_setupGraphics(int xsize,int ysize,int bpp,int verbose) +void *SDL_setupGraphics(int xsize,int ysize,int bpp,int scale, + int fullscreen,int verbose) { SDL_Surface *sdl_screen; + int mode; + + + mode=SDL_SWSURFACE; + if (fullscreen) mode|=SDL_FULLSCREEN; + /* Initialize the SDL library */ if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { @@ -20,10 +27,10 @@ void *SDL_setupGraphics(int xsize,int ysize,int bpp,int verbose) atexit(SDL_Quit); /* Initialize the display */ - sdl_screen = SDL_SetVideoMode(xsize, ysize, 16, SDL_SWSURFACE); + sdl_screen = SDL_SetVideoMode(xsize, ysize, 16, mode); if ( sdl_screen == NULL ) { fprintf(stderr, "Couldn't set %dx%dx%d video mode: %s\n", - xsize,ysize,bpp,SDL_GetError()); + xsize*scale,ysize*scale,bpp,SDL_GetError()); exit(1); } if (verbose) { @@ -72,6 +79,64 @@ void SDL_NoScale16bpp_BlitMem(vmwSVMWGraphState *target_p, vmwVisual *source) { /* Write this out to the screen */ SDL_UpdateRect(target, 0, 0, source->xsize, source->ysize); +} + + /* I should make this generic, but it makes it really slow */ +void SDL_Double16bpp_BlitMem(vmwSVMWGraphState *target_p, vmwVisual *source) { + + int x,y,Bpp,scale; + + unsigned char *s_pointer,*t_pointer; + + SDL_Surface *target; + + target=(SDL_Surface *)target_p->output_screen; + + scale=target_p->scale; + + if ( SDL_MUSTLOCK(target) ) { + if ( SDL_LockSurface(target) < 0 ) + return; + } + + Bpp=target->format->BytesPerPixel; + + s_pointer=source->memory; + t_pointer=((Uint8 *)target->pixels); + + for (y=0;yysize;y++) { + for (x=0;xxsize;x++) { + + /* i=0, j=0 */ + *((Uint16 *) ( (t_pointer)))= + source->palette[*(s_pointer)]; + + /* i=1, j=0 */ + *((Uint16 *) ( (t_pointer+(2*target_p->xsize) )))= + source->palette[*(s_pointer)]; + /* i=0, j=1 */ + *((Uint16 *) ( (t_pointer+2) ))= + source->palette[*(s_pointer)]; + + /* i=1 j=1 */ + *((Uint16 *) ( (t_pointer+2+(2*target_p->xsize) )))= + source->palette[*(s_pointer)]; + + + s_pointer++; t_pointer+=4; + } + t_pointer+=2*target_p->xsize; + } + + + /* Update the display */ + if ( SDL_MUSTLOCK(target) ) { + SDL_UnlockSurface(target); + } + + /* Write this out to the screen */ + SDL_UpdateRect(target, 0, 0, target_p->xsize, target_p->ysize); + } diff --git a/svmwgraph/sdl_svmwgraph.h b/svmwgraph/sdl_svmwgraph.h index f85842f..3b0604d 100644 --- a/svmwgraph/sdl_svmwgraph.h +++ b/svmwgraph/sdl_svmwgraph.h @@ -2,7 +2,9 @@ #include -void *SDL_setupGraphics(int xsize,int ysize,int bpp,int verbose); +void *SDL_setupGraphics(int xsize,int ysize,int bpp,int scale,int fullscreen, + int verbose); void SDL_NoScale16bpp_BlitMem(vmwSVMWGraphState *target, vmwVisual *source); +void SDL_Double16bpp_BlitMem(vmwSVMWGraphState *target_p, vmwVisual *source); void SDL_clearKeyboardBuffer(); int SDL_getInput(); diff --git a/svmwgraph/svmwgraph.h b/svmwgraph/svmwgraph.h index 06b0517..0ada212 100644 --- a/svmwgraph/svmwgraph.h +++ b/svmwgraph/svmwgraph.h @@ -29,6 +29,7 @@ typedef struct { int xsize; int ysize; int bpp; + int scale; void *output_screen; vmwFont *default_font; } vmwSVMWGraphState; @@ -107,12 +108,14 @@ void vmwUnFade(vmwVisual *source); /* From vmw_setup.c */ -extern void *(*vmwSetupGraphics)(int xsize,int ysize, int bpp, int verbose); +extern void *(*vmwSetupGraphics)(int xsize,int ysize, int bpp, int scale, + int fullscreen,int verbose); extern void (*vmwBlitMemToDisplay)(vmwSVMWGraphState *display, vmwVisual *source); extern void (*vmwClearKeyboardBuffer)(void); extern int (*vmwGetInput)(void); vmwSVMWGraphState *vmwSetupSVMWGraph(int display_type,int xsize,int ysize, - int bpp,int verbose); + int bpp,int scale,int fullscreen, + int verbose); vmwVisual *vmwSetupVisual(int xsize,int ysize,int palette_size); /* From vmw_sprite.c */ @@ -123,8 +126,11 @@ vmwSprite *vmwGetSprite(int x, int y, void vmwPutSprite(vmwSprite *sprite,int x,int y, vmwVisual *screen); -void vmwPutPartialSprite(vmwVisual *destination, - vmwSprite *sprite, - int x_start,int y_start, - int x_stop, int y_stop); +void vmwPutSpriteNonTransparent(vmwSprite *sprite,int x,int y, + vmwVisual *screen); + +void vmwPutPartialSprite(vmwVisual *destination, + vmwSprite *sprite,int x,int y, + int x_start,int x_stop, + int y_start,int y_stop); diff --git a/svmwgraph/vmw_setup.c b/svmwgraph/vmw_setup.c index b09b1af..9152aa3 100644 --- a/svmwgraph/vmw_setup.c +++ b/svmwgraph/vmw_setup.c @@ -6,13 +6,15 @@ #include /* For printf */ #include /* For Memory Allocation */ -void *(*vmwSetupGraphics)(int xsize,int ysize, int bpp, int verbose); +void *(*vmwSetupGraphics)(int xsize,int ysize, int bpp, + int scale, int fullscreen,int verbose); void (*vmwBlitMemToDisplay)(vmwSVMWGraphState *display, vmwVisual *source); void (*vmwClearKeyboardBuffer)(void); int (*vmwGetInput)(void); vmwSVMWGraphState *vmwSetupSVMWGraph(int display_type,int xsize,int ysize, - int bpp,int verbose) { + int bpp,int scale,int fullscreen, + int verbose) { vmwSVMWGraphState *temp_state; @@ -23,11 +25,16 @@ vmwSVMWGraphState *vmwSetupSVMWGraph(int display_type,int xsize,int ysize, switch (display_type) { case VMW_SDLTARGET: vmwSetupGraphics=SDL_setupGraphics; - vmwBlitMemToDisplay=SDL_NoScale16bpp_BlitMem; + if (scale==1) + vmwBlitMemToDisplay=SDL_NoScale16bpp_BlitMem; + else + vmwBlitMemToDisplay=SDL_Double16bpp_BlitMem; + vmwClearKeyboardBuffer=SDL_clearKeyboardBuffer; vmwGetInput=SDL_getInput; temp_state->output_screen= - vmwSetupGraphics(xsize,ysize,bpp,verbose); + vmwSetupGraphics(xsize,ysize,bpp,scale, + fullscreen,verbose); break; default: printf("ERROR! Unknown Display Target %i.\n",display_type); return NULL; @@ -36,6 +43,7 @@ vmwSVMWGraphState *vmwSetupSVMWGraph(int display_type,int xsize,int ysize, temp_state->xsize=xsize; temp_state->ysize=ysize; temp_state->bpp=bpp; + temp_state->scale=scale; temp_state->default_font=NULL; return temp_state; diff --git a/svmwgraph/vmw_sprite.c b/svmwgraph/vmw_sprite.c index e1b6425..d603fd0 100644 --- a/svmwgraph/vmw_sprite.c +++ b/svmwgraph/vmw_sprite.c @@ -46,23 +46,52 @@ void vmwPutSprite(vmwSprite *sprite,int x,int y, } } +void vmwPutSpriteNonTransparent(vmwSprite *sprite,int x,int y, + vmwVisual *screen) { + + unsigned char *temp_source,*temp_destination; + int xx,yy; + + temp_source=sprite->spritedata; + temp_destination= (unsigned char *)(screen->memory)+(y*screen->xsize+x); + + for (yy=0;yyysize;yy++) { + for (xx=0;xxxsize;xx++) { + *(temp_destination)=*(temp_source); + temp_source++; + temp_destination++; + } + temp_destination+=((screen->xsize-sprite->xsize)); + } +} + void vmwPutPartialSprite(vmwVisual *destination, - vmwSprite *sprite, - int x_start,int y_start, - int x_stop, int y_stop) - { /* x_start/stop not implemented yet */ -// int xx,yy; - /* - * dest+=(dest_stride*y); - * for(yy=0;yy=y_start) && (yy<=y_stop)) ) - * memcpy(dest+(stride_factor*(xx+x)),(src+xx),stride_factor); - * // **(dest+xx+x)=15; - * src+=w; - * dest+=dest_stride; - * } - * */ - return; + vmwSprite *sprite,int x,int y, + int x_start,int x_stop, + int y_start, int y_stop) + { + + unsigned char *temp_source,*temp_destination; + int xx,yy; + + temp_source=sprite->spritedata; + temp_destination=(unsigned char *)(destination->memory)+(y*destination->xsize+x); + + for (yy=0;yyysize;yy++) { + for (xx=0;xxxsize;xx++) { + /* Only draw if in bounds */ + if ( (yy+y>=y_start) && (yy+y<=y_stop) && + (xx+x>=x_start) && (xx+x<=x_stop) ) { + + if (*temp_source!=0) { + *(temp_destination)=*(temp_source); + } + } + temp_source++; + temp_destination++; + } + temp_destination+=((destination->xsize-sprite->xsize)); + } + return; } diff --git a/tb1.c b/tb1.c index 5e09426..9b63760 100644 --- a/tb1.c +++ b/tb1.c @@ -1,6 +1,6 @@ /****************************************************************\ \* TOM BOMBEM AND THE INVASION OF THE INANIMATE_OBJECTS */ -/* version 2.9.2 15 September 2000 *\ +/* version 2.9.5 16 September 2000 *\ \* by Vince Weaver weave@eng.umd.edu */ /* *\ \* Originally written in Pascal and x86 assembly for DOS */ @@ -10,7 +10,7 @@ \* This source is released under the GPL */ /****************************************************************/ -#define TB1_VERSION "2.9.2" +#define TB1_VERSION "2.9.5" #include #include /* for calloc */ @@ -36,13 +36,15 @@ int command_line_help(int show_version,char *runas) { if (!show_version) { - printf("Usage: %s [-force8bpp] [-nosound] [-readonly]" + printf("Usage: %s [-8bpp] [-double] [-fullscreen] [-nosound] [-readonly]" " [-version] [-?]\n\n",runas); - printf(" -force8bpp : force to run in 8bpp mode\n"); - printf(" -nosound : disables sound within game\n"); - printf(" -readonly : don't try to write files to disk\n"); - printf(" -version : print version\n"); - printf(" -? : print this help message\n"); + printf(" -8bpp : force to run in 8bpp mode\n"); + printf(" -double : play in 640x480 mode\n"); + printf(" -fullscreen : play in fullscreen mode (if available)\n"); + printf(" -nosound : disables sound within game\n"); + printf(" -readonly : don't try to write files to disk\n"); + printf(" -version : print version\n"); + printf(" -? : print this help message\n"); printf("\n"); } return 0; @@ -54,7 +56,7 @@ int main(int argc,char **argv) int i,grapherror,reloadpic=0; int custom_palette[256]; int ch,x,barpos,time_sec; - int scale=1; + int scale=1,fullscreen=0; FILE *fff; vmwVisual *virtual_1,*virtual_2,*virtual_3; @@ -92,7 +94,10 @@ int main(int argc,char **argv) command_line_help(0,argv[0]); return 5; break; case 'v': command_line_help(1,argv[0]); return 5; break; - + case 'f': + fullscreen=1; break; + case 'd': + scale=2; break; case 'n': game_state->sound_enabled=0; printf(" + Sound totally disabled\n"); @@ -116,17 +121,17 @@ int main(int argc,char **argv) /* Find the Data */ /* FIXME : User Defined Path Info*/ - if ( (fff=fopen("./data/data_files_here","r"))!=NULL) { + if ( (fff=fopen("./data/tb1_data_files_here","r"))!=NULL) { strncpy(game_state->path_to_data,"./data/",20); } - else if ( (fff=fopen("/usr/local/games/tb1/data/data_files_here","r")) + else if ( (fff=fopen("/usr/local/games/tb1/data/tb1_data_files_here","r")) !=NULL) { strncpy(game_state->path_to_data,"/usr/local/games/tb1/data/",40); } else { char tempst[200]; - sprintf(tempst,"%s/.tb1/data/data_files_here",getenv("HOME")); + sprintf(tempst,"%s/.tb1/data/tb1_data_files_here",getenv("HOME")); if ( (fff=fopen(tempst,"r"))!=NULL) { sprintf(game_state->path_to_data,"%s/.tb1/data/",getenv("HOME")); } @@ -155,17 +160,28 @@ int main(int argc,char **argv) /* Load sounds */ initSound(game_state->path_to_data); - loadSound(tb1_data_file("vmwfan.mod",game_state->path_to_data)); + loadSound(tb1_data_file("music/vmwfan.mod",game_state->path_to_data)); printf(" + Loaded sounds...\n"); /* Setup Graphics */ + + if (scale==1) { if ( (game_state->graph_state=vmwSetupSVMWGraph(VMW_SDLTARGET, - 320*scale,200*scale, - 16,1))==NULL) { + 320,200, + 16,scale,fullscreen,1))==NULL) { fprintf(stderr,"ERROR: Couldn't get display set up properly.\n"); return VMW_ERROR_DISPLAY; } + } + else { + if ( (game_state->graph_state=vmwSetupSVMWGraph(VMW_SDLTARGET, + 640,480, + 16,scale,fullscreen,1))==NULL) { + fprintf(stderr,"ERROR: Couldn't get display set up properly.\n"); + return VMW_ERROR_DISPLAY; + } + } /* Load the tom bombem font */ game_state->graph_state->default_font= @@ -234,7 +250,7 @@ int main(int argc,char **argv) pauseawhile(5); stopSound(); - loadSound(tb1_data_file("weave1.mod",game_state->path_to_data)); + loadSound(tb1_data_file("music/weave1.mod",game_state->path_to_data)); /* Clear the Screen and get ready for the Menu */ diff --git a/tools/README b/tools/README new file mode 100644 index 0000000..70f1fd0 --- /dev/null +++ b/tools/README @@ -0,0 +1 @@ +Tools that will be useful for developing new levels of tb1. diff --git a/tools/lev2edit.c b/tools/lev2edit.c index 73b5e24..9e752c0 100644 --- a/tools/lev2edit.c +++ b/tools/lev2edit.c @@ -1,12 +1,3 @@ -/****************************************************************\ -\* TOM BOMBEM AND THE INVASION OF THE INANIMATE_OBJECTS */ -/* version 2.9.0 February 28, 1998 *\ -\* by Vince Weaver weave@eng.umd.edu */ -/* *\ -\* Originally written in Pascal and x86 assembly for DOS */ -/* Ported to Linux, C, and ggi late 1997-early 1998 *\ -\* This source is released under the GPL */ -/****************************************************************/ #define TB1_VERSION "2.9.0" @@ -19,8 +10,8 @@ #include #include -#include "svmwgrap.h" -#include "tblib.h" +#include "../svmwgrap.h" +#include "../gtblib.h" /* Exported Global Variables */ ggi_visual_t vis,vaddr,vaddr2; @@ -38,6 +29,13 @@ char path_to_data[256]; struct timeval time_info; struct timezone dontcare; +/*----------------*/ + +int game_map[12][200]; +int max_x,max_y,u_x,u_y,x_pos=0,y_pos=0,x,y; +char tempst[40]; + + /* Setup the Graphics */ int setup_graphics(int force_8bpp) { @@ -188,7 +186,7 @@ int main(int argc,char **argv) srandom(time(NULL)); /* Load the tom bombem font */ - tb1_font=LoadVMWFont(tb1_data_file("tbfont.tb1",(char *)tempst),8,16,256); + tb1_font=LoadVMWFont("../data/tbfont.tb1",8,16,256); /* Setup Graphics */ if (setup_graphics(force_8bpp)==2) { @@ -210,58 +208,36 @@ int main(int argc,char **argv) Load the title screen */ grapherror=GGILoadPicPacked(0,0,vis,1,1, - tb1_data_file("tbomb1.tb1",(char *)tempst), + "../data/tbomb1.tb1", (ggi_color *)&eight_bit_pal, (ggi_pixel *)&tb1_pal,color_depth); grapherror=GGILoadPicPacked(0,0,vaddr2,1,1, - tb1_data_file("tbomb1.tb1",(char *)tempst), + "../data/tbomb1.tb1", (ggi_color *)&eight_bit_pal, (ggi_pixel *)&tb1_pal,color_depth); ggiFlush(vis); ggiFlush(vaddr2); pauseawhile(5); + + max_x=12;max_y=200; + x_pos=0; y_pos=0; + for(x=0;xwrite,plb_vaddr2->read,plb_vis->stride,200); + vmwCrossBlit(plb_vis->write,plb_vaddr->read,plb_vis->stride,200); ggiFlush(vis); barpos=0; - VMWtextxy("F1 HELP",0,190,tb1_pal[9],tb1_pal[7],0,tb1_font,vis); - coolbox(117,61,199,140,1,vis); + ggiFlush(vis); ch=0; - while(ch!=TB_ENTER){ - if (barpos==0) VMWtextxy("NEW GAME",123,67, - tb1_pal[32],tb1_pal[0],1,tb1_font,vis); - else VMWtextxy("NEW GAME",123,67, - tb1_pal[32],tb1_pal[7],1,tb1_font,vis); - if (barpos==1) VMWtextxy("OPTIONS",123,77, - tb1_pal[32],tb1_pal[0],1,tb1_font,vis); - else VMWtextxy("OPTIONS",123,77, - tb1_pal[32],tb1_pal[7],1,tb1_font,vis); - if (barpos==2) VMWtextxy("ABOUT",123,87, - tb1_pal[32],tb1_pal[0],1,tb1_font,vis); - else VMWtextxy("ABOUT",123,87, - tb1_pal[32],tb1_pal[7],1,tb1_font,vis); - if (barpos==3) VMWtextxy("LOAD GAME",123,97, - tb1_pal[32],tb1_pal[0],1,tb1_font,vis); - else VMWtextxy("LOAD GAME",123,97, - tb1_pal[32],tb1_pal[7],1,tb1_font,vis); - if (barpos==4) VMWtextxy("STORY",123,107, - tb1_pal[32],tb1_pal[0],1,tb1_font,vis); - else VMWtextxy("STORY",123,107, - tb1_pal[32],tb1_pal[7],1,tb1_font,vis); - if (barpos==5) VMWtextxy("CREDITS",123,117, - tb1_pal[32],tb1_pal[0],1,tb1_font,vis); - else VMWtextxy("CREDITS",123,117, - tb1_pal[32],tb1_pal[7],1,tb1_font,vis); - if (barpos==6) VMWtextxy("QUIT",123,127, - tb1_pal[32],tb1_pal[0],1,tb1_font,vis); - else VMWtextxy("QUIT",123,127, - tb1_pal[32],tb1_pal[7],1,tb1_font,vis); - ggiFlush(vis); + + while( ((ch=get_input())==0)) { usleep(10); @@ -269,15 +245,26 @@ int main(int argc,char **argv) /* Change menu position based on key pressed */ ch2=toupper(ch); - if ((ch==TB_DOWN)||(ch==TB_RIGHT)) barpos++; - if ((ch==TB_UP) || (ch==TB_LEFT)) barpos--; - if (ch==TB_F1) {barpos=10; ch=TB_ENTER;} /*F1*/ - if (ch2=='N') barpos=0; /*N*/ - if (ch2=='O') barpos=1; /*O*/ - if (ch2=='A') barpos=2; /*A*/ - if (ch2=='L') barpos=3; /*L*/ - if (ch2=='S') barpos=4; /*S*/ - if (ch2=='C') barpos=5; /*C*/ + if (ch==TB_DOWN) y_pos++; + if (ch==TB_RIGHT) x_pos++; + if (ch==TB_UP) y_pos--; + if (ch==TB_LEFT) x_pos--; + if (y_pos<0) y_pos=0; if(x_pos<0) x_pos=0; + if (y_pos>(max_y-20)) y_pos=max_y-20; + if (x_pos>(max_x)) x_pos=max_x; + + ggiSetGCForeground(vaddr,tb1_pal[0]); + ggiFillscreen(vaddr); + + + for(x=0;x