// *********************************************** // RENDER.C - main file // *********************************************** // **** includes //#include "useful.h" #include "global.h" #include "init.h" #include "render.h" // **** private variables static u_long vertSync; void EffectSnow(GsOT *); void EffectSand(GsOT *); void EffectFog(GsOT *tOt); void UpdateWater(); // **** render the screen void RenderProgram(u_char tColour) { static GsBOXF fadeBox = {(1<<30)+(1<<28), -160, -128, 320, 256, 0, 0, 0}; long counter;//, counter2, counter3; u_long currentBuffer = GsGetActiveBuff(); GsClearOt(0, 0, &OTable_Header[currentBuffer]); GsSetWorkBase((PACKET*)Packet_Memory[currentBuffer]); // FntPrint("%d\n", vertSync); for (counter=0; counter<(CurrentMap->objects.numObjects); counter++) DrawModel(&OBJECTMODEL[counter], &OTable_Header[currentBuffer+4], 16-OTABLE_LENGTH); for (counter=1; counter<21; counter++) { if (CHARINFO[counter].howToHandle == 1) DrawModel2(&CHARINFO[counter].charModel, &OTable_Header[currentBuffer+2], 16-OTABLE_LENGTH); } DrawModel(&GROUNDMODEL, &OTable_Header[currentBuffer], 16-OTABLE_LENGTH); DrawModel2(&CHARINFO[0].charModel, &OTable_Header[currentBuffer+2], 16-OTABLE_LENGTH); DrawModel(&SKYMODEL, &OTable_Header[currentBuffer], 16-OTABLE_LENGTH); // fading out the screen if (tColour > 0) { fadeBox.r = fadeBox.g = fadeBox.b = tColour; GsSortBoxFill(&fadeBox, &OTable_Header[currentBuffer], 0); } GsSortBoxFill(&HEALTH, &OTable_Header[currentBuffer], 0); // draw snow! switch(CurrentMap->weather) { case 0: break; case 1: EffectSnow(&OTable_Header[currentBuffer]); break; case 2: EffectFog(&OTable_Header[currentBuffer]); break; case 3: break; // case 4: EffectSand(&OTable_Header[currentBuffer]); break; } if (CurrentMap->fight == TRUE) GsSortFastSprite(&SWORD, &OTable_Header[currentBuffer], 0); else GsSortFastSprite(&BUBBLE, &OTable_Header[currentBuffer], 0); UpdateWater(); DrawSync(0); vertSync = VSync(2); GsSwapDispBuff(); switch(CurrentMap->weather) { case 0: GsSortClear(0,0,0, &OTable_Header[currentBuffer]); break; case 1: GsSortClear(255,255,255, &OTable_Header[currentBuffer]); break; case 2: GsSortClear(0,0,0, &OTable_Header[currentBuffer]); break; case 3: GsSortClear(255,255,255, &OTable_Header[currentBuffer]); break; case 4: GsSortClear(161, 162, 127, &OTable_Header[currentBuffer]); break; } GsDrawOt(&OTable_Header[currentBuffer]); FntFlush(Fnt); } // **** render the screen void RenderProgramText(u_long tSpeaker) { long counter;//, counter2, counter3; u_long currentBuffer = GsGetActiveBuff(); GsClearOt(0, 0, &OTable_Header[currentBuffer]); GsSetWorkBase((PACKET*)Packet_Memory[currentBuffer]); // FntPrint("%d\n", vertSync); for (counter=0; counter<(CurrentMap->objects.numObjects); counter++) DrawModel(&OBJECTMODEL[counter], &OTable_Header[currentBuffer+4], 16-OTABLE_LENGTH); for (counter=1; counter<21; counter++) { if (CHARINFO[counter].howToHandle == 1) DrawModel(&CHARINFO[counter].charModel, &OTable_Header[currentBuffer+2], 16-OTABLE_LENGTH); } DrawModel(&GROUNDMODEL, &OTable_Header[currentBuffer], 16-OTABLE_LENGTH); DrawModel(&CHARINFO[0].charModel, &OTable_Header[currentBuffer+2], 16-OTABLE_LENGTH); DrawModel(&SKYMODEL, &OTable_Header[currentBuffer], 16-OTABLE_LENGTH); GsSortBoxFill(&HEALTH, &OTable_Header[currentBuffer], 0); // draw snow! switch(CurrentMap->weather) { case 0: break; case 1: EffectSnow(&OTable_Header[currentBuffer]); break; case 2: EffectFog(&OTable_Header[currentBuffer]); break; case 3: break; // case 4: EffectSand(&OTable_Header[currentBuffer]); break; } switch(tSpeaker) { case 0: { TEXTBOX.r = 128; TEXTBOX.g = 0; TEXTBOX.b = 128; TEXT2.y = -47; TEXT.y = -50; TEXTBOX.y = -52; break;} case 1: { TEXTBOX.r = 128; TEXTBOX.g = 128; TEXTBOX.b = 0; TEXT2.y = -2; TEXT.y = -5; TEXTBOX.y = -7; break;} case 2: { TEXTBOX.r = 0; TEXTBOX.g = 128; TEXTBOX.b = 128; TEXT2.y = 43; TEXT.y = 40; TEXTBOX.y = 38; break;} } GsSortFastSprite(&TEXT, &OTable_Header[currentBuffer], 0); GsSortFastSprite(&TEXT2, &OTable_Header[currentBuffer], 0); GsSortBoxFill(&TEXTBOX, &OTable_Header[currentBuffer], 0); if (CurrentMap->fight == TRUE) GsSortFastSprite(&SWORD, &OTable_Header[currentBuffer], 0); else GsSortFastSprite(&BUBBLE, &OTable_Header[currentBuffer], 0); UpdateWater(); DrawSync(0); vertSync = VSync(2); GsSwapDispBuff(); switch(CurrentMap->weather) { case 0: GsSortClear(0,0,0, &OTable_Header[currentBuffer]); break; case 1: GsSortClear(255,255,255, &OTable_Header[currentBuffer]); break; case 2: GsSortClear(0,0,0, &OTable_Header[currentBuffer]); break; case 3: GsSortClear(255,255,255, &OTable_Header[currentBuffer]); break; } GsDrawOt(&OTable_Header[currentBuffer]); FntFlush(Fnt); } void EffectSnow(GsOT * tOT) { static u_char snow1x = 0, snow1y = 0; static u_char snow2x = 0, snow2y = 0; static u_char snow3x = 0, snow3y = 0; long counter, counter2; SNOWSPRITE[0].r = SNOWSPRITE[0].g = SNOWSPRITE[0].b = 128; SNOWSPRITE[1].r = SNOWSPRITE[1].g = SNOWSPRITE[1].b = 128; SNOWSPRITE[2].r = SNOWSPRITE[2].g = SNOWSPRITE[2].b = 128; for (counter=-160-snow1x; counter<160; counter+=32) { SNOWSPRITE[0].x = counter; for (counter2=-128-snow1y; counter2<128; counter2+=32) { SNOWSPRITE[0].y = counter2; GsSortSprite(&SNOWSPRITE[0], tOT, 1); } } for (counter=-160-snow2x; counter<160; counter+=20) { SNOWSPRITE[1].x = counter; for (counter2=-128-snow2y; counter2<128; counter2+=17) { SNOWSPRITE[1].y = counter2; GsSortSprite(&SNOWSPRITE[1], tOT, 45); } } for (counter=-160-snow3x; counter<160; counter+=28) { SNOWSPRITE[2].x = counter; for (counter2=-128-snow3y; counter2<128; counter2+=25) { SNOWSPRITE[2].y = counter2; GsSortSprite(&SNOWSPRITE[2], tOT, 65); } } snow1x = (snow1x+4) % 32; snow1y = (snow1y-6+32) % 32; snow2x = (snow2x+3) % 20; snow2y = (snow2y-4+17) % 17; snow3x = (snow3x+2) % 28; snow3y = (snow3y-2+25) % 25; } void EffectFog(GsOT *tOt) { static GsBOXF snowBox = {(1<<30), -160, -128, 320, 256, 64, 56, 72}; GsSortBoxFill(&snowBox, tOt, 30); GsSortBoxFill(&snowBox, tOt, 45); GsSortBoxFill(&snowBox, tOt, 60); } void UpdateWater() { static u_char waterAnim = 0; RECT tMove = {512,(waterAnim>>3)*32, 8, 32}; static RECT tMove1 = {336, 96+1, 8, 31}; static RECT tMove2 = {336, 96, 8, 1}; MoveImage(&tMove, 320, 96); MoveImage(&tMove1, 336, 96); MoveImage(&tMove2, 336, 96+31); waterAnim = (waterAnim+1) % (4<<3); } void EffectSand(GsOT * tOT) { static u_char snow1x = 0, snow1y = 0; static u_char snow2x = 0, snow2y = 0; static u_char snow3x = 0, snow3y = 0; long counter, counter2; SNOWSPRITE[0].r = 128; SNOWSPRITE[0].g = 118; SNOWSPRITE[0].b = 63; SNOWSPRITE[1].r = 128; SNOWSPRITE[1].g = 118; SNOWSPRITE[1].b = 63; SNOWSPRITE[2].r = 128; SNOWSPRITE[2].g = 118; SNOWSPRITE[2].b = 63; for (counter=-160-snow1x; counter<160; counter+=32) { SNOWSPRITE[0].x = counter; for (counter2=-128-snow1y; counter2<128; counter2+=32) { SNOWSPRITE[0].y = counter2; GsSortSprite(&SNOWSPRITE[0], tOT, 1); } } for (counter=-160-snow2x; counter<160; counter+=20) { SNOWSPRITE[1].x = counter; for (counter2=-128-snow2y; counter2<128; counter2+=17) { SNOWSPRITE[1].y = counter2; GsSortSprite(&SNOWSPRITE[1], tOT, 45); } } for (counter=-160-snow3x; counter<160; counter+=28) { SNOWSPRITE[2].x = counter; for (counter2=-128-snow3y; counter2<128; counter2+=25) { SNOWSPRITE[2].y = counter2; GsSortSprite(&SNOWSPRITE[2], tOT, 65); } } snow1x = (snow1x+8) % 32; snow1y = (snow1y-3+32) % 32; snow2x = (snow2x-5) % 20; snow2y = (snow2y-2+17) % 17; snow3x = (snow3x+3) % 28; snow3y = (snow3y-1+25) % 25; }