// *********************************************************************************** // Programs written by R.Swan - rs108@mdx.ac.uk - www.netyaroze-europe.com/~middex2 // MAIN routine // *********************************************************************************** #include #include "header.h" // **** Global #defines #define TIM_HEADING (0x80090000) #define TIM_TEXTURE (0x80091000) #define TMD_DYNAMIC_START (0x80098000) // **** Global variables and structures Model Model_4_NS_FP; // instance of 3d model Model Model_4_NS_GP; Model Model_4_TX_NS_FP; Model Model_4_TX_NS_GP; u_long *TMD_START[8]; // stores memery address of // all dynamically created TMDs GsSPRITE TextSprite; // instance of a sprite u_long GameRunning = true; u_long Tmd_Selected = 0; u_long JustMoved = 0; // **** Function prototypes void UpdateWorld(); void RenderWorld(); void ProcessJoyPad(); void create_4_NS_FP(); void create_4_NS_GP(); void create_4_TX_NS_FP(); void create_4_TX_NS_GP(); // *********************************************************************************** // MAIN FUNCTION // *********************************************************************************** void main() { InitialiseScreen3D(); InitialiseJoyPad(); create_4_NS_FP(); create_4_NS_GP(); create_4_TX_NS_FP(); create_4_TX_NS_GP(); LoadTIMData(TIM_HEADING); LoadTIMData(TIM_TEXTURE); SetSpriteInfo(&TextSprite, TIM_HEADING, 0, 100); TextSprite.attribute += (1<<30) + (1<<28); SetLightDirectional(0, 1, 1, 0, 255, 255, 255); SetLightAmbient(512,512,512); TurnFoggingOff(); SetViewPoint(250, 0, 0, -500, -1000, 0, 0, 0); // SetModelSubdivision(&Model_4_NS_FP, GsDIV2); // SetModelSubdivision(&Model_4_NS_GP, GsDIV2); SetModelSubdivision(&Model_4_TX_NS_FP, GsDIV2); SetModelSubdivision(&Model_4_TX_NS_GP, GsDIV2); SetModelInfo(&Model_4_NS_FP, -900, 0, 1200, TMD_START[0]); SetModelInfo(&Model_4_NS_GP, -300, 0, 1200, TMD_START[1]); SetModelInfo(&Model_4_TX_NS_FP, 300, 0, 1200, TMD_START[2]); SetModelInfo(&Model_4_TX_NS_GP, 900, 0, 1200, TMD_START[3]); while (GameRunning == true) { ProcessJoyPad(); UpdateWorld(); RenderWorld(); } ResetGraph(3); } // *********************************************************************************** // Function Definitions // *********************************************************************************** // **** Update everything in the world before drawing void UpdateWorld() { FntPrint(FntOne, "Speed - %d/280\n", VerticalSync); // ViewPoint.vrx = myOBJ.Object_Coord.coord.t[0]; // ViewPoint.vry = myOBJ.Object_Coord.coord.t[1]; // ViewPoint.vrz = myOBJ.Object_Coord.coord.t[2]; // GsSetRefView2(&ViewPoint); MoveModelTo(&Model_4_NS_FP, -900, 200, 1200); MoveModelTo(&Model_4_NS_GP, -300, 200, 1200); MoveModelTo(&Model_4_TX_NS_FP, 300, 200, 1200); MoveModelTo(&Model_4_TX_NS_GP, 900, 200, 1200); RotateModel(&Model_4_NS_FP, 5, 8, 24); RotateModel(&Model_4_NS_GP, 12, 9, 3); RotateModel(&Model_4_TX_NS_FP, 20, 10, 2); RotateModel(&Model_4_TX_NS_GP, 5, 17, 12); switch(Tmd_Selected) { case 0: MoveModelTo(&Model_4_NS_FP, 0, 0, 0); FntPrint(FntOne, "Four sided,\nNo Shading,\nFlat Pigment"); break; case 1: MoveModelTo(&Model_4_NS_GP, 0, 0, 0); FntPrint(FntOne, "Four sided,\nNo shading,\nGradient Pigment"); break; case 2: MoveModelTo(&Model_4_TX_NS_FP, 0, 0, 0); FntPrint(FntOne, "Four sided,\nTeXtured,\nNo Shading,\nFlat Pigment"); break; case 3: MoveModelTo(&Model_4_TX_NS_GP, 0, 0, 0); FntPrint(FntOne, "Four sided,\nTeXtured,\nNo Shading,\nGradient Pigment"); break; } } // **** Register everything that needs to be drawn and then draw it void RenderWorld() { RenderPrepare(); DrawModel(&Model_4_NS_GP); DrawModel(&Model_4_NS_FP); DrawModel(&Model_4_TX_NS_FP); DrawModel(&Model_4_TX_NS_GP); DrawSprite(&TextSprite, 0); DrawColouredBox(-120, 100-13, 120, 100+13, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255); DrawColouredBox(-160, -120, 0, 0, -1, BACK, 63, 63, 127, 127, 63, 63, 127, 63, 63, 63, 127, 63); DrawColouredBox(0, -120, 160, 0, -1, BACK, 127, 63, 63, 63, 127, 63, 63, 127, 63, 63, 63, 127); DrawColouredBox(-160, 0, 0, 120, -1, BACK, 127, 63, 63, 63, 127, 63, 63, 127, 63, 63, 63, 127); DrawColouredBox(0, 0, 160, 120, -1, BACK, 63, 127, 63, 63, 63, 127, 63, 63, 127, 127, 63, 63); RenderFinish(); } // **** Respond to user input from joypad 1 void ProcessJoyPad() { u_long PAD = ReadJoyPad(); if ((PAD& PADselect) && (PAD& PADstart)) GameRunning = false; if ((PAD& PADleft) && (Tmd_Selected>0) && (JustMoved==0)) {Tmd_Selected--; JustMoved=1;} if ((PAD& PADright) && (Tmd_Selected<3) && (JustMoved==0)) {Tmd_Selected++; JustMoved=1;} if (PAD == 0) JustMoved = 0; } // *********************************************************************************** // MAIN FUNCTION // *********************************************************************************** // **** create a cube with no shading and flat pigment void create_4_NS_FP() { VERTEX v[8]; COLOUR rgb[6]; TMD_setVERTEX(&v[0], -200, -200, 200); TMD_setVERTEX(&v[1], 200, -200, 200); TMD_setVERTEX(&v[2], 200, -200, -200); TMD_setVERTEX(&v[3], -200, -200, -200); TMD_setVERTEX(&v[4], -200, 200, 200); TMD_setVERTEX(&v[5], 200, 200, 200); TMD_setVERTEX(&v[6], 200, 200, -200); TMD_setVERTEX(&v[7], -200, 200, -200); TMD_setCOLOUR(&rgb[0], 255, 128, 128); TMD_setCOLOUR(&rgb[1], 255, 255, 128); TMD_setCOLOUR(&rgb[2], 128, 255, 128); TMD_setCOLOUR(&rgb[3], 128, 255, 255); TMD_setCOLOUR(&rgb[4], 128, 128, 255); TMD_setCOLOUR(&rgb[5], 255, 128, 255); TMD_prepare(TMD_DYNAMIC_START, &v[0], &rgb[0], 0); TMD_set4_NS_FP( 0, 1, 3, 2, 0); TMD_set4_NS_FP( 2, 1, 6, 5, 1); TMD_set4_NS_FP( 3, 2, 7, 6, 2); TMD_set4_NS_FP( 0, 3, 4, 7, 3); TMD_set4_NS_FP( 1, 0, 5, 4, 4); TMD_set4_NS_FP( 7, 6, 4, 5, 5); TMD_START[0] = TMD_finish(); } // **** create a cube with no shading and gradient pigment void create_4_NS_GP() { VERTEX v[8]; COLOUR rgb[8]; TMD_setVERTEX(&v[0], -200, -200, 200); TMD_setVERTEX(&v[1], 200, -200, 200); TMD_setVERTEX(&v[2], 200, -200, -200); TMD_setVERTEX(&v[3], -200, -200, -200); TMD_setVERTEX(&v[4], -200, 200, 200); TMD_setVERTEX(&v[5], 200, 200, 200); TMD_setVERTEX(&v[6], 200, 200, -200); TMD_setVERTEX(&v[7], -200, 200, -200); TMD_setCOLOUR(&rgb[0], 255, 32, 255); TMD_setCOLOUR(&rgb[1], 255, 32, 32); TMD_setCOLOUR(&rgb[2], 255, 255, 32); TMD_setCOLOUR(&rgb[3], 255, 255, 255); TMD_setCOLOUR(&rgb[4], 32, 32, 255); TMD_setCOLOUR(&rgb[5], 32, 32, 32); TMD_setCOLOUR(&rgb[6], 32, 255, 32); TMD_setCOLOUR(&rgb[7], 32, 255, 255); TMD_prepare(0, &v[0], &rgb[0], 0); TMD_set4_NS_GP( 0, 1, 3, 2, 0, 1, 3, 2); TMD_set4_NS_GP( 2, 1, 6, 5, 2, 1, 6, 5); TMD_set4_NS_GP( 3, 2, 7, 6, 3, 2, 7, 6); TMD_set4_NS_GP( 0, 3, 4, 7, 0, 3, 4, 7); TMD_set4_NS_GP( 1, 0, 5, 4, 1, 0, 5, 4); TMD_set4_NS_GP( 7, 6, 4, 5, 7, 6, 4, 5); TMD_START[1] = TMD_finish(); } void create_4_TX_NS_FP() { VERTEX v[8]; COLOUR rgb[6]; TEXTURE txt[1]; TMD_setVERTEX(&v[0], -200, -200, 200); TMD_setVERTEX(&v[1], 200, -200, 200); TMD_setVERTEX(&v[2], 200, -200, -200); TMD_setVERTEX(&v[3], -200, -200, -200); TMD_setVERTEX(&v[4], -200, 200, 200); TMD_setVERTEX(&v[5], 200, 200, 200); TMD_setVERTEX(&v[6], 200, 200, -200); TMD_setVERTEX(&v[7], -200, 200, -200); TMD_setCOLOUR(&rgb[0], 255, 128, 128); TMD_setCOLOUR(&rgb[1], 255, 255, 128); TMD_setCOLOUR(&rgb[2], 128, 255, 128); TMD_setCOLOUR(&rgb[3], 128, 255, 255); TMD_setCOLOUR(&rgb[4], 128, 128, 255); TMD_setCOLOUR(&rgb[5], 255, 128, 255); TMD_setTEXTURE(&txt[0], 320, 256, 383, 256, 320, 319, 383, 319, 1, 0, 481); TMD_prepare(0, &v[0], &rgb[0], &txt[0]); TMD_set4_TX_NS_FP( 0, 1, 3, 2, 0, 0); TMD_set4_TX_NS_FP( 2, 1, 6, 5, 1, 0); TMD_set4_TX_NS_FP( 3, 2, 7, 6, 2, 0); TMD_set4_TX_NS_FP( 0, 3, 4, 7, 3, 0); TMD_set4_TX_NS_FP( 1, 0, 5, 4, 4, 0); TMD_set4_TX_NS_FP( 7, 6, 4, 5, 5, 0); TMD_START[2] = TMD_finish(); } void create_4_TX_NS_GP() { VERTEX v[8]; COLOUR rgb[8]; TEXTURE txt[1]; TMD_setVERTEX(&v[0], -200, -200, 200); TMD_setVERTEX(&v[1], 200, -200, 200); TMD_setVERTEX(&v[2], 200, -200, -200); TMD_setVERTEX(&v[3], -200, -200, -200); TMD_setVERTEX(&v[4], -200, 200, 200); TMD_setVERTEX(&v[5], 200, 200, 200); TMD_setVERTEX(&v[6], 200, 200, -200); TMD_setVERTEX(&v[7], -200, 200, -200); TMD_setCOLOUR(&rgb[0], 255, 32, 255); TMD_setCOLOUR(&rgb[1], 255, 32, 32); TMD_setCOLOUR(&rgb[2], 255, 255, 32); TMD_setCOLOUR(&rgb[3], 255, 255, 255); TMD_setCOLOUR(&rgb[4], 32, 32, 255); TMD_setCOLOUR(&rgb[5], 32, 32, 32); TMD_setCOLOUR(&rgb[6], 32, 255, 32); TMD_setCOLOUR(&rgb[7], 32, 255, 255); TMD_setTEXTURE(&txt[0], 320, 256, 383, 256, 320, 319, 383, 319, 1, 0, 481); TMD_prepare(0, &v[0], &rgb[0], &txt[0]); TMD_set4_TX_NS_GP( 0, 1, 3, 2, 0, 1, 3, 2, 0); TMD_set4_TX_NS_GP( 2, 1, 6, 5, 2, 1, 6, 5, 0); TMD_set4_TX_NS_GP( 3, 2, 7, 6, 3, 2, 7, 6, 0); TMD_set4_TX_NS_GP( 0, 3, 4, 7, 0, 3, 4, 7, 0); TMD_set4_TX_NS_GP( 1, 0, 5, 4, 1, 0, 5, 4, 0); TMD_set4_TX_NS_GP( 7, 6, 4, 5, 7, 6, 4, 5, 0); TMD_START[3] = TMD_finish(); }