int main() { Build_Sin_Cos_Tables(); RUN_ALL_TEST(); return 0; }
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game // start up DirectDraw (replace the parms as you desire) DDraw_Init(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP); // initialize directinput DInput_Init(); // acquire the keyboard DInput_Init_Keyboard(); // add calls to acquire other directinput devices here... // initialize directsound and directmusic DSound_Init(); DMusic_Init(); // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // seed random number generator srand(Start_Clock()); Open_Error_File("ERROR.TXT"); // initialize math engine Build_Sin_Cos_Tables(); // initialize the camera with 90 FOV, normalized coordinates Init_CAM4DV1(&cam, // the camera object CAM_MODEL_EULER, // the euler model &cam_pos, // initial camera position &cam_dir, // initial camera angles NULL, // no target 50.0, // near and far clipping planes 500.0, 90.0, // field of view in degrees WINDOW_WIDTH, // size of final screen viewport WINDOW_HEIGHT); // load the cube Load_OBJECT4DV1_PLG(&obj, "cube2.plg",&vscale, &vpos, &vrot); // set the position of the cube in the world obj.world_pos.x = 0; obj.world_pos.y = 0; obj.world_pos.z = 100; // return success return(1); } // end Game_Init
void C3DTransform::Initialize() { if (false == g_bInitSinCosTable) { _control87(_MCW_RC, _RC_DOWN); //设置FPU的舍入模式,在Bilinear函数中需要使用汇编加快float->int Build_Sin_Cos_Tables(); g_bInitSinCosTable = true; } }
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping var // start up DirectDraw (replace the parms as you desire) DDraw_Init(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP); // initialize directinput DInput_Init(); // acquire the keyboard DInput_Init_Keyboard(); // add calls to acquire other directinput devices here... // initialize directsound and directmusic DSound_Init(); DMusic_Init(); // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // seed random number generator srand(Start_Clock()); Open_Error_File("ERROR.TXT"); // initialize math engine Build_Sin_Cos_Tables(); // clear the drawing surface DDraw_Fill_Surface(lpddsback, 0); // return success return(1); } // end Game_Init
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping var // start up DirectDraw (replace the parms as you desire) DDraw_Init(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP); // initialize directinput DInput_Init(); // acquire the keyboard DInput_Init_Keyboard(); // add calls to acquire other directinput devices here... // initialize directsound and directmusic DSound_Init(); DMusic_Init(); // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // seed random number generator srand(Start_Clock()); Open_Error_File("ERROR.TXT"); // initialize math engine Build_Sin_Cos_Tables(); // initialize the camera with 90 FOV, normalized coordinates Init_CAM4DV1(&cam, // the camera object CAM_MODEL_EULER, // the euler model &cam_pos, // initial camera position &cam_dir, // initial camera angles &cam_target, // no target 200.0, // near and far clipping planes 12000.0, 120.0, // field of view in degrees WINDOW_WIDTH, // size of final screen viewport WINDOW_HEIGHT); // load the master tank object VECTOR4D_INITXYZ(&vscale,0.75,0.75,0.75); Load_OBJECT4DV1_PLG(&obj_tank, "tank2.plg",&vscale, &vpos, &vrot); // load player object for 3rd person view VECTOR4D_INITXYZ(&vscale,0.75,0.75,0.75); Load_OBJECT4DV1_PLG(&obj_player, "tank3.plg",&vscale, &vpos, &vrot); // load the master tower object VECTOR4D_INITXYZ(&vscale,1.0, 2.0, 1.0); Load_OBJECT4DV1_PLG(&obj_tower, "tower1.plg",&vscale, &vpos, &vrot); // load the master ground marker VECTOR4D_INITXYZ(&vscale,3.0,3.0,3.0); Load_OBJECT4DV1_PLG(&obj_marker, "marker1.plg",&vscale, &vpos, &vrot); // position the tanks for (index = 0; index < NUM_TANKS; index++) { // randomly position the tanks tanks[index].x = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); tanks[index].y = 0; // obj_tank.max_radius; tanks[index].z = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); tanks[index].w = RAND_RANGE(0,360); } // end for // position the towers for (index = 0; index < NUM_TOWERS; index++) { // randomly position the tower towers[index].x = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); towers[index].y = 0; // obj_tower.max_radius; towers[index].z = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); } // end for // return success return(1); } // end Game_Init
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping var // start up DirectDraw (replace the parms as you desire) DDraw_Init2(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP,0); // initialize directinput DInput_Init(); // acquire the keyboard DInput_Init_Keyboard(); // add calls to acquire other directinput devices here... // initialize directsound and directmusic DSound_Init(); DMusic_Init(); // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // seed random number generator srand(Start_Clock()); Open_Error_File("MD2ERROR.TXT"); // initialize math engine Build_Sin_Cos_Tables(); // initialize the camera with 90 FOV, normalized coordinates Init_CAM4DV1(&cam, // the camera object CAM_MODEL_EULER, // the euler model &cam_pos, // initial camera position &cam_dir, // initial camera angles &cam_target, // no target 10.0, // near and far clipping planes 12000.0, 90.0, // field of view in degrees WINDOW_WIDTH, // size of final screen viewport WINDOW_HEIGHT); VECTOR4D terrain_pos = {0,0,0,0}; Generate_Terrain_OBJECT4DV2(&obj_terrain, // pointer to object TERRAIN_WIDTH, // width in world coords on x-axis TERRAIN_HEIGHT, // height (length) in world coords on z-axis TERRAIN_SCALE, // vertical scale of terrain "height_grass_40_40_01.bmp", // filename of height bitmap encoded in 256 colors "stone256_256_01.bmp", // "grass256_256_01.bmp", //"checker2562562.bmp", // filename of texture map RGB16Bit(255,255,255), // color of terrain if no texture &terrain_pos, // initial position NULL, // initial rotations POLY4DV2_ATTR_RGB16 //| POLY4DV2_ATTR_SHADE_MODE_FLAT | POLY4DV2_ATTR_SHADE_MODE_GOURAUD | POLY4DV2_ATTR_SHADE_MODE_TEXTURE); // set a scaling vector VECTOR4D_INITXYZ(&vscale, 20, 20, 20); // load all the light objects in for (int index_obj=0; index_obj < NUM_LIGHT_OBJECTS; index_obj++) { Load_OBJECT4DV2_COB2(&obj_light_array[index_obj], object_light_filenames[index_obj], &vscale, &vpos, &vrot, VERTEX_FLAGS_INVERT_WINDING_ORDER | VERTEX_FLAGS_TRANSFORM_LOCAL | VERTEX_FLAGS_TRANSFORM_LOCAL_WORLD ,0 ); } // end for index // set current object curr_light_object = 0; obj_light = &obj_light_array[curr_light_object]; // set up lights Reset_Lights_LIGHTV2(lights2, MAX_LIGHTS); // create some working colors white.rgba = _RGBA32BIT(255,255,255,0); gray.rgba = _RGBA32BIT(100,100,100,0); black.rgba = _RGBA32BIT(0,0,0,0); red.rgba = _RGBA32BIT(255,0,0,0); green.rgba = _RGBA32BIT(0,255,0,0); blue.rgba = _RGBA32BIT(0,0,255,0); orange.rgba = _RGBA32BIT(255,128,0,0); yellow.rgba = _RGBA32BIT(255,255,0,0); // ambient light Init_Light_LIGHTV2(lights2, AMBIENT_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_AMBIENT, // ambient light type gray, black, black, // color for ambient term only NULL, NULL, // no need for pos or dir 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D dlight_dir = {-1,1,-1,1}; // directional light Init_Light_LIGHTV2(lights2, INFINITE_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_INFINITE, // infinite light type black, gray, black, // color for diffuse term only NULL, &dlight_dir, // need direction only 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D plight_pos = {0,500,0,1}; // point light Init_Light_LIGHTV2(lights2, POINT_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_POINT, // pointlight type black, orange, black, // color for diffuse term only &plight_pos, NULL, // need pos only 0,.001,0, // linear attenuation only 0,0,1); // spotlight info NA // point light Init_Light_LIGHTV2(lights2, POINT_LIGHT2_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_POINT, // pointlight type black, yellow, black, // color for diffuse term only &plight_pos, NULL, // need pos only 0,.002,0, // linear attenuation only 0,0,1); // spotlight info NA VECTOR4D slight2_pos = {0,200,0,1}; VECTOR4D slight2_dir = {-1,1,-1,1}; // create lookup for lighting engine RGB_16_8_IndexedRGB_Table_Builder(DD_PIXEL_FORMAT565, // format we want to build table for palette, // source palette rgblookup); // lookup table // create the z buffer Create_Zbuffer(&zbuffer, WINDOW_WIDTH, WINDOW_HEIGHT, ZBUFFER_ATTR_32BIT); // build alpha lookup table RGB_Alpha_Table_Builder(NUM_ALPHA_LEVELS, rgb_alpha_table); // load background sounds wind_sound_id = DSound_Load_WAV("STATIONTHROB.WAV"); // start the sounds DSound_Play(wind_sound_id, DSBPLAY_LOOPING); DSound_Set_Volume(wind_sound_id, 100); #if 0 // load in the cockpit image Create_BOB(&cockpit, 0,0,800,600,2, BOB_ATTR_VISIBLE | BOB_ATTR_SINGLE_FRAME, DDSCAPS_SYSTEMMEMORY, 0, 16); Load_Bitmap_File(&bitmap16bit, "lego02.BMP"); Load_Frame_BOB16(&cockpit, &bitmap16bit,0,0,0,BITMAP_EXTRACT_MODE_ABS); Unload_Bitmap_File(&bitmap16bit); Load_Bitmap_File(&bitmap16bit, "lego02b.BMP"); Load_Frame_BOB16(&cockpit, &bitmap16bit,1,0,0,BITMAP_EXTRACT_MODE_ABS); Unload_Bitmap_File(&bitmap16bit); #endif // load background image that scrolls Load_Bitmap_File(&bitmap16bit, "sunset800_600_03.bmp"); Create_Bitmap(&background_bmp,0,0,800,600,16); Load_Image_Bitmap16(&background_bmp, &bitmap16bit,0,0,BITMAP_EXTRACT_MODE_ABS); Unload_Bitmap_File(&bitmap16bit); static VECTOR4D vs = {4,4,4,1}; static VECTOR4D vp = {0,0,0,1}; // load the md2 object Load_Object_MD2(&obj_md2, // the loaded md2 file placed in container "./md2/q2mdl-tekkblade/tris.md2", // "D:/Games/quakeII/baseq2/players/male/tris.md2", // the filename of the .MD2 model &vs, &vp, NULL, "./md2/q2mdl-tekkblade/blade_black.bmp", //"D:/Games/quakeII/baseq2/players/male/claymore.bmp", // the texture filename for the model POLY4DV2_ATTR_RGB16 | POLY4DV2_ATTR_SHADE_MODE_FLAT | POLY4DV2_ATTR_SHADE_MODE_TEXTURE, RGB16Bit(255,255,255), VERTEX_FLAGS_SWAP_YZ); // control ordering etc. // prepare OBJECT4DV2 for md2 Prepare_OBJECT4DV2_For_MD2(&obj_model, // pointer to destination object &obj_md2); // md2 object to extract frame from // set the animation Set_Animation_MD2(&obj_md2,MD2_ANIM_STATE_STANDING_IDLE, MD2_ANIM_LOOP); #if 0 // play with these for more speed :) // set single precission _control87( _PC_24, _MCW_PC ); // set to flush mode _control87( _DN_FLUSH, _MCW_DN ); // set rounding mode _control87( _RC_NEAR, _MCW_RC ); #endif // return success return(1); } // end Game_Init
void board_init(void) { GPIO_InitTypeDef gpio; SystemCoreClockUpdate( ); // turn on peripherals needed by all RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1 | RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_BKPSRAM, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_TIM1 | RCC_APB2Periph_SYSCFG, ENABLE); RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2 | RCC_APB1Periph_SPI3 | RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 | RCC_APB1Periph_TIM5 | RCC_APB1Periph_TIM12 | RCC_APB1Periph_PWR, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); RCC_LSEConfig(RCC_LSE_OFF); LEDInit(LED_BLUE); LEDInit(LED_GREEN); gpio.GPIO_Pin = GPIO_Pin_0; gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOC, &gpio); GPIO_SetBits(GPIOC, GPIO_Pin_0); gpio.GPIO_Pin = GPIO_Pin_1; gpio.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOC, &gpio); GPIO_ResetBits(GPIOC, GPIO_Pin_1); //SPI1 output to electronic switch to control mask GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_6; // SPI1 MISO gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &gpio); GPIO_ResetBits(GPIOA, GPIO_Pin_6); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); // max7456 SPI MOIS MISO SLK pin config gpio.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOC, &gpio); // max7456 SPI CS Pin gpio.GPIO_Pin = GPIO_Pin_15; gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &gpio); GPIO_SetBits(GPIOA,GPIO_Pin_15); Build_Sin_Cos_Tables(); LoadParams(); checkDefaultParam(); SPI_MAX7456_init(); atti_mp_scale = (float)eeprom_buffer.params.Atti_mp_scale_real + (float)eeprom_buffer.params.Atti_mp_scale_frac * 0.01; atti_3d_scale = (float)eeprom_buffer.params.Atti_3D_scale_real + (float)eeprom_buffer.params.Atti_3D_scale_frac * 0.01; atti_3d_min_clipX = eeprom_buffer.params.Atti_mp_posX - (uint32_t)(22*atti_mp_scale); atti_3d_max_clipX = eeprom_buffer.params.Atti_mp_posX + (uint32_t)(22*atti_mp_scale); atti_3d_min_clipY = eeprom_buffer.params.Atti_mp_posY - (uint32_t)(30*atti_mp_scale); atti_3d_max_clipY = eeprom_buffer.params.Atti_mp_posY + (uint32_t)(34*atti_mp_scale); }
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping var // start up DirectDraw (replace the parms as you desire) DDraw_Init(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP); // initialize directinput DInput_Init(); // acquire the keyboard DInput_Init_Keyboard(); // add calls to acquire other directinput devices here... // initialize directsound and directmusic DSound_Init(); DMusic_Init(); // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // seed random number generator srand(Start_Clock()); Open_Error_File("ERROR.TXT"); // initialize math engine Build_Sin_Cos_Tables(); // initialize the camera with 90 FOV, normalized coordinates Init_CAM4DV1(&cam, // the camera object CAM_MODEL_EULER, // the euler model &cam_pos, // initial camera position &cam_dir, // initial camera angles &cam_target, // no target 200.0, // near and far clipping planes 12000.0, 120.0, // field of view in degrees WINDOW_WIDTH, // size of final screen viewport WINDOW_HEIGHT); // load constant shaded water VECTOR4D_INITXYZ(&vscale,10.00,10.00,10.00); Load_OBJECT4DV2_COB(&obj_constant_water,"water_constant_01.cob", &vscale, &vpos, &vrot, VERTEX_FLAGS_SWAP_YZ | VERTEX_FLAGS_TRANSFORM_LOCAL | VERTEX_FLAGS_TRANSFORM_LOCAL_WORLD ); // load flat shaded water VECTOR4D_INITXYZ(&vscale,10.00,10.00,10.00); Load_OBJECT4DV2_COB(&obj_flat_water,"water_flat_01.cob", &vscale, &vpos, &vrot, VERTEX_FLAGS_SWAP_YZ | VERTEX_FLAGS_TRANSFORM_LOCAL | VERTEX_FLAGS_TRANSFORM_LOCAL_WORLD ); // load gouraud shaded water VECTOR4D_INITXYZ(&vscale,10.00,10.00,10.00); Load_OBJECT4DV2_COB(&obj_gouraud_water,"water_gouraud_01.cob", &vscale, &vpos, &vrot, VERTEX_FLAGS_SWAP_YZ | VERTEX_FLAGS_TRANSFORM_LOCAL | VERTEX_FLAGS_TRANSFORM_LOCAL_WORLD ); // set up lights Reset_Lights_LIGHTV1(); // create some working colors white.rgba = _RGBA32BIT(255,255,255,0); gray.rgba = _RGBA32BIT(100,100,100,0); black.rgba = _RGBA32BIT(0,0,0,0); red.rgba = _RGBA32BIT(255,0,0,0); green.rgba = _RGBA32BIT(0,255,0,0); blue.rgba = _RGBA32BIT(0,0,255,0); // ambient light Init_Light_LIGHTV1(AMBIENT_LIGHT_INDEX, LIGHTV1_STATE_ON, // turn the light on LIGHTV1_ATTR_AMBIENT, // ambient light type gray, black, black, // color for ambient term only NULL, NULL, // no need for pos or dir 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D dlight_dir = {-1,0,-1,0}; // directional light Init_Light_LIGHTV1(INFINITE_LIGHT_INDEX, LIGHTV1_STATE_ON, // turn the light on LIGHTV1_ATTR_INFINITE, // infinite light type black, gray, black, // color for diffuse term only NULL, &dlight_dir, // need direction only 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D plight_pos = {0,200,0,0}; // point light Init_Light_LIGHTV1(POINT_LIGHT_INDEX, LIGHTV1_STATE_ON, // turn the light on LIGHTV1_ATTR_POINT, // pointlight type black, green, black, // color for diffuse term only &plight_pos, NULL, // need pos only 0,.001,0, // linear attenuation only 0,0,1); // spotlight info NA VECTOR4D slight2_pos = {0,200,0,0}; VECTOR4D slight2_dir = {-1,0,-1,0}; // spot light2 Init_Light_LIGHTV1(SPOT_LIGHT2_INDEX, LIGHTV1_STATE_ON, // turn the light on LIGHTV1_ATTR_SPOTLIGHT2, // spot light type 2 black, red, black, // color for diffuse term only &slight2_pos, &slight2_dir, // need pos only 0,.001,0, // linear attenuation only 0,0,1); // create lookup for lighting engine RGB_16_8_IndexedRGB_Table_Builder(DD_PIXEL_FORMAT565, // format we want to build table for palette, // source palette rgblookup); // lookup table // return success return(1); } // end Game_Init
void InitGame(RenderContext *rcx) { Build_Sin_Cos_Tables(); Load_OBJECT4D_3DSASC(&myobj, "cube.asc", &vscale, &vpos, &vrot, VERTEX_FLAGS_INVERT_WINDING_ORDER | VERTEX_FLAGS_SWAP_YZ); // initialize the camera with 90 FOV, normalized coordinates Init_CAM4D(&cam, // the camera object CAM_MODEL_EULER, // euler camera model &cam_pos, // initial camera position &cam_dir, // initial camera angles NULL, // no initial target 50.0, // near and far clipping planes 500.0, 90.0, // field of view in degrees rcx->nWindowWidth, // size of final screen viewport rcx->nWindowHeight); Reset_Lights(); // create some working colors ARGB white, gray, black, red, green, blue; white.argb = RGB32BIT_8888(255,255,255,0); gray.argb = RGB32BIT_8888(0,200,100,100); black.argb = RGB32BIT_8888(0,0,0,0); red.argb = RGB32BIT_8888(255,0,0,0); green.argb = RGB32BIT_8888(0,255,0,0); blue.argb = RGB32BIT_8888(0,0,255,0); // ambient light Init_Light(0, LIGHT_STATE_ON, // turn the light on LIGHT_ATTR_AMBIENT, // ambient light type gray, black, black, // color for ambient term only NULL, NULL, // no need for pos or dir 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D dlight_dir = {0,1,1,1}; // directional light Init_Light(1, LIGHT_STATE_ON, // turn the light on LIGHT_ATTR_INFINITE, // infinite light type black, gray, black, // color for diffuse term only NULL, &dlight_dir, // need direction only 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D plight_pos = {0,200,0,0}; // point light Init_Light(2, LIGHT_STATE_OFF, // turn the light on LIGHT_ATTR_POINT, // pointlight type black, green, black, // color for diffuse term only &plight_pos, NULL, // need pos only 0, .001, 0, // linear attenuation only 0,0,1); // spotlight info NA VECTOR4D slight_pos = {0,200,0,0}; VECTOR4D slight_dir = {-1,0,-1,0}; // spot light Init_Light(3, LIGHT_STATE_OFF, // turn the light on LIGHT_ATTR_SPOTLIGHT2, // spot light type 2 black, red, black, // color for diffuse term only &slight_pos, &slight_dir, // need pos only 0,.001,0, // linear attenuation only 0,0,1); }
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping var // start up DirectDraw (replace the parms as you desire) DDraw_Init2(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP,1); // initialize directinput DInput_Init(); // acquire the keyboard DInput_Init_Keyboard(); // add calls to acquire other directinput devices here... // initialize directsound and directmusic DSound_Init(); DMusic_Init(); // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // seed random number generator srand(Start_Clock()); Open_Error_File("ERROR.TXT"); // initialize math engine Build_Sin_Cos_Tables(); // initialize the camera with 90 FOV, normalized coordinates Init_CAM4DV1(&cam, // the camera object CAM_MODEL_EULER, // the euler model &cam_pos, // initial camera position &cam_dir, // initial camera angles &cam_target, // no target 10.0, // near and far clipping planes 12000.0, 120.0, // field of view in degrees WINDOW_WIDTH, // size of final screen viewport WINDOW_HEIGHT); // set a scaling vector VECTOR4D_INITXYZ(&vscale,20.00,20.00,20.00); // load all the objects in for (int index_obj=0; index_obj < NUM_OBJECTS; index_obj++) { Load_OBJECT4DV2_COB2(&obj_array[index_obj], object_filenames[index_obj], &vscale, &vpos, &vrot, VERTEX_FLAGS_SWAP_YZ | VERTEX_FLAGS_TRANSFORM_LOCAL // | VERTEX_FLAGS_TRANSFORM_LOCAL_WORLD | VERTEX_FLAGS_INVERT_TEXTURE_V ,0 ); } // end for index_obj // set current object curr_object = 0; obj_work = &obj_array[curr_object]; // position the scenery objects randomly for (index = 0; index < NUM_SCENE_OBJECTS; index++) { // set master object link scene_objects[index].obj = obj_work; // randomly position object scene_objects[index].pos.x = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); scene_objects[index].pos.y = RAND_RANGE(-200, 200); scene_objects[index].pos.z = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); scene_objects[index].rot.y = RAND_RANGE(0,360); scene_objects[index].auxi[0] = RAND_RANGE(1,5); // set state of object container scene_objects[index].state = ((OBJECT4DV2_PTR)scene_objects[index].obj)->state; // set attributes scene_objects[index].attr = ((OBJECT4DV2_PTR)scene_objects[index].obj)->attr; } // end for // set up lights Reset_Lights_LIGHTV2(lights2, MAX_LIGHTS); // create some working colors white.rgba = _RGBA32BIT(255,255,255,0); gray.rgba = _RGBA32BIT(150,150,150,0); black.rgba = _RGBA32BIT(0,0,0,0); red.rgba = _RGBA32BIT(255,0,0,0); green.rgba = _RGBA32BIT(0,255,0,0); blue.rgba = _RGBA32BIT(0,0,255,0); // ambient light Init_Light_LIGHTV2(lights2, // array of lights to work with AMBIENT_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_AMBIENT, // ambient light type gray, black, black, // color for ambient term only NULL, NULL, // no need for pos or dir 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D dlight_dir = {-1,0,-1,1}; // directional light Init_Light_LIGHTV2(lights2, // array of lights to work with INFINITE_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_INFINITE, // infinite light type black, gray, black, // color for diffuse term only NULL, &dlight_dir, // need direction only 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D plight_pos = {0,200,0,1}; // point light Init_Light_LIGHTV2(lights2, // array of lights to work with POINT_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_POINT, // pointlight type black, green, black, // color for diffuse term only &plight_pos, NULL, // need pos only 0,.002,0, // linear attenuation only 0,0,1); // spotlight info NA VECTOR4D slight2_pos = {0,1000,0,1}; VECTOR4D slight2_dir = {-1,0,-1,1}; // spot light2 Init_Light_LIGHTV2(lights2, // array of lights to work with SPOT_LIGHT2_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_SPOTLIGHT2, // spot light type 2 black, red, black, // color for diffuse term only &slight2_pos, &slight2_dir, // need pos only 0,.001,0, // linear attenuation only 0,0,1); // create lookup for lighting engine RGB_16_8_IndexedRGB_Table_Builder(DD_PIXEL_FORMAT565, // format we want to build table for palette, // source palette rgblookup); // lookup table // create the z buffer Create_Zbuffer(&zbuffer, WINDOW_WIDTH, WINDOW_HEIGHT, ZBUFFER_ATTR_32BIT); // create the alpha lookup table RGB_Alpha_Table_Builder(NUM_ALPHA_LEVELS, rgb_alpha_table); // load in the background Create_BOB(&background, 0,0,800,600,1, BOB_ATTR_VISIBLE | BOB_ATTR_SINGLE_FRAME, DDSCAPS_SYSTEMMEMORY, 0, 16); Load_Bitmap_File(&bitmap16bit, "nebblue01.bmp"); Load_Frame_BOB16(&background, &bitmap16bit,0,0,0,BITMAP_EXTRACT_MODE_ABS); Unload_Bitmap_File(&bitmap16bit); // build the bounding hierarchical volume tree with 3 divisions per level BHV_Build_Tree(&bhv_tree, scene_objects, NUM_SCENE_OBJECTS, 0, 3, UNIVERSE_RADIUS); // return success return(1); } // end Game_Init
void board_init(void) { GPIO_InitTypeDef gpio; SystemCoreClockUpdate(); // turn on peripherals needed by all RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1 | RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_BKPSRAM, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_TIM1 | RCC_APB2Periph_SYSCFG, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 | RCC_APB1Periph_SPI3 | RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 | RCC_APB1Periph_TIM5 | RCC_APB1Periph_TIM12 | RCC_APB1Periph_PWR, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); RCC_LSEConfig(RCC_LSE_OFF); LEDInit(LED_BLUE); LEDInit(LED_GREEN); gpio.GPIO_Pin = GPIO_Pin_0; gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOC, &gpio); GPIO_SetBits(GPIOC, GPIO_Pin_0); gpio.GPIO_Pin = GPIO_Pin_1; gpio.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOC, &gpio); GPIO_ResetBits(GPIOC, GPIO_Pin_1); //SPI1 output to electronic switch to control mask GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_6; // SPI1 MISO gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &gpio); GPIO_ResetBits(GPIOA, GPIO_Pin_6); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); // max7456 SPI MOIS MISO SLK pin config gpio.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOC, &gpio); // max7456 SPI CS Pin gpio.GPIO_Pin = GPIO_Pin_15; gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &gpio); GPIO_SetBits(GPIOA, GPIO_Pin_15); Build_Sin_Cos_Tables(); bool force_clear_params = false; force_clear_params = test_force_clear_all_params(); if (force_clear_params) { clear_all_params(); } LoadParams(); checkDefaultParam(); SPI_MAX7456_init(); set_up_offsets_and_scale(); }
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping var // start up DirectDraw (replace the parms as you desire) DDraw_Init2(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP,0); // initialize directinput DInput_Init(); // acquire the keyboard DInput_Init_Keyboard(); // add calls to acquire other directinput devices here... // initialize directsound and directmusic DSound_Init(); DMusic_Init(); // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // seed random number generator srand(Start_Clock()); Open_Error_File("ERROR.TXT"); // initialize math engine Build_Sin_Cos_Tables(); // initialize the camera with 90 FOV, normalized coordinates Init_CAM4DV1(&cam, // the camera object CAM_MODEL_EULER, // the euler model &cam_pos, // initial camera position &cam_dir, // initial camera angles &cam_target, // no target 10.0, // near and far clipping planes 12000.0, 120.0, // field of view in degrees WINDOW_WIDTH, // size of final screen viewport WINDOW_HEIGHT); #if 0 VECTOR4D terrain_pos = {0,0,0,0}; Generate_Terrain_OBJECT4DV2(&obj_terrain, // pointer to object TERRAIN_WIDTH, // width in world coords on x-axis TERRAIN_HEIGHT, // height (length) in world coords on z-axis TERRAIN_SCALE, // vertical scale of terrain "checkerheight05.bmp", // filename of height bitmap encoded in 256 colors "checker256256.bmp", // filename of texture map RGB16Bit(255,255,255), // color of terrain if no texture &terrain_pos, // initial position NULL, // initial rotations POLY4DV2_ATTR_RGB16 | POLY4DV2_ATTR_SHADE_MODE_CONSTANT // | POLY4DV2_ATTR_SHADE_MODE_FLAT // | POLY4DV2_ATTR_SHADE_MODE_GOURAUD | POLY4DV2_ATTR_SHADE_MODE_TEXTURE); #endif // set a scaling vector VECTOR4D_INITXYZ(&vscale,TERRAIN_WIDTH,1.00,TERRAIN_HEIGHT); // set position VECTOR4D_INITXYZ(&vpos, 0, 0, 0); Load_OBJECT4DV2_COB2(&obj_terrain, "plane01.cob", &vscale, &vpos, &vrot, VERTEX_FLAGS_SWAP_YZ | VERTEX_FLAGS_TRANSFORM_LOCAL /* VERTEX_FLAGS_TRANSFORM_LOCAL_WORLD*/,0 ); // set a scaling vector VECTOR4D_INITXYZ(&vscale,60.00,60.00,60.00); // load all the objects in for (int index_obj=0; index_obj < NUM_OBJECTS; index_obj++) { Load_OBJECT4DV2_COB2(&obj_array[index_obj], object_filenames[index_obj], &vscale, &vpos, &vrot, VERTEX_FLAGS_SWAP_YZ | VERTEX_FLAGS_TRANSFORM_LOCAL /* VERTEX_FLAGS_TRANSFORM_LOCAL_WORLD*/,0 ); } // end for index_obj // position the scenery objects randomly for (index = 0; index < NUM_SCENE_OBJECTS; index++) { // randomly position object scene_objects[index].x = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); scene_objects[index].y = 75; // RAND_RANGE(-(UNIVERSE_RADIUS/2), (UNIVERSE_RADIUS/2)); scene_objects[index].z = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); // select random object, use w to store value scene_objects[index].w = RAND_RANGE(0,NUM_OBJECTS-1); } // end for // select random velocities for (index = 0; index < NUM_SCENE_OBJECTS; index++) { // randomly position object scene_objects_vel[index].x = RAND_RANGE(-MAX_VEL, MAX_VEL); scene_objects_vel[index].y = 0; // RAND_RANGE(-MAX_VEL, MAX_VEL); scene_objects_vel[index].z = RAND_RANGE(-MAX_VEL, MAX_VEL); } // end for // set up lights Reset_Lights_LIGHTV2(lights2, MAX_LIGHTS); // create some working colors white.rgba = _RGBA32BIT(255,255,255,0); gray.rgba = _RGBA32BIT(150,150,150,0); black.rgba = _RGBA32BIT(0,0,0,0); red.rgba = _RGBA32BIT(255,0,0,0); green.rgba = _RGBA32BIT(0,255,0,0); blue.rgba = _RGBA32BIT(0,0,255,0); // ambient light Init_Light_LIGHTV2(lights2, // array of lights to work with AMBIENT_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_AMBIENT, // ambient light type gray, black, black, // color for ambient term only NULL, NULL, // no need for pos or dir 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D dlight_dir = {-1,0,-1,1}; // directional light Init_Light_LIGHTV2(lights2, // array of lights to work with INFINITE_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_INFINITE, // infinite light type black, gray, black, // color for diffuse term only NULL, &dlight_dir, // need direction only 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D plight_pos = {0,200,0,1}; // point light Init_Light_LIGHTV2(lights2, // array of lights to work with POINT_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_POINT, // pointlight type black, green, black, // color for diffuse term only &plight_pos, NULL, // need pos only 0,.002,0, // linear attenuation only 0,0,1); // spotlight info NA VECTOR4D slight2_pos = {0,1000,0,1}; VECTOR4D slight2_dir = {-1,0,-1,1}; // spot light2 Init_Light_LIGHTV2(lights2, // array of lights to work with SPOT_LIGHT2_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_SPOTLIGHT2, // spot light type 2 black, red, black, // color for diffuse term only &slight2_pos, &slight2_dir, // need pos only 0,.001,0, // linear attenuation only 0,0,1); // create lookup for lighting engine RGB_16_8_IndexedRGB_Table_Builder(DD_PIXEL_FORMAT565, // format we want to build table for palette, // source palette rgblookup); // lookup table // create the z buffer Create_Zbuffer(&zbuffer, WINDOW_WIDTH, WINDOW_HEIGHT, ZBUFFER_ATTR_32BIT); // build alpha lookup table RGB_Alpha_Table_Builder(NUM_ALPHA_LEVELS, rgb_alpha_table); // load in the background Create_BOB(&background, 0,0,800,600,1, BOB_ATTR_VISIBLE | BOB_ATTR_SINGLE_FRAME, DDSCAPS_SYSTEMMEMORY, 0, 16); Load_Bitmap_File(&bitmap16bit, "cloud03.bmp"); Load_Frame_BOB16(&background, &bitmap16bit,0,0,0,BITMAP_EXTRACT_MODE_ABS); Unload_Bitmap_File(&bitmap16bit); // return success return(1); } // end Game_Init
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping var // start up DirectDraw (replace the parms as you desire) DDraw_Init(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP); // initialize directinput DInput_Init(); // acquire the keyboard DInput_Init_Keyboard(); // add calls to acquire other directinput devices here... // initialize directsound and directmusic DSound_Init(); DMusic_Init(); // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // seed random number generator srand(Start_Clock()); Open_Error_File("ERROR.TXT"); // initialize math engine Build_Sin_Cos_Tables(); // initialize the camera with 90 FOV, normalized coordinates Init_CAM4DV1(&cam, // the camera object CAM_MODEL_EULER, // the euler model &cam_pos, // initial camera position &cam_dir, // initial camera angles &cam_target, // no target 40.0, // near and far clipping planes 12000.0, 90.0, // field of view in degrees WINDOW_WIDTH, // size of final screen viewport WINDOW_HEIGHT); VECTOR4D terrain_pos = {0,0,0,0}; Generate_Terrain_OBJECT4DV2(&obj_terrain, // pointer to object TERRAIN_WIDTH, // width in world coords on x-axis TERRAIN_HEIGHT, // height (length) in world coords on z-axis TERRAIN_SCALE, // vertical scale of terrain "checkerheight01.bmp", // filename of height bitmap encoded in 256 colors "checker256256.bmp", // filename of texture map RGB16Bit(255,255,255), // color of terrain if no texture &terrain_pos, // initial position NULL, // initial rotations POLY4DV2_ATTR_RGB16 | POLY4DV2_ATTR_SHADE_MODE_FLAT // | POLY4DV2_ATTR_SHADE_MODE_GOURAUD | POLY4DV2_ATTR_SHADE_MODE_TEXTURE); // the shading attributes we would like // set up lights Reset_Lights_LIGHTV2(lights2, MAX_LIGHTS); // create some working colors white.rgba = _RGBA32BIT(255,255,255,0); gray.rgba = _RGBA32BIT(100,100,100,0); black.rgba = _RGBA32BIT(0,0,0,0); red.rgba = _RGBA32BIT(255,0,0,0); green.rgba = _RGBA32BIT(0,255,0,0); blue.rgba = _RGBA32BIT(0,0,255,0); // ambient light Init_Light_LIGHTV2(lights2, AMBIENT_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_AMBIENT, // ambient light type gray, black, black, // color for ambient term only NULL, NULL, // no need for pos or dir 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D dlight_dir = {-1,1,-1,1}; // directional light Init_Light_LIGHTV2(lights2, INFINITE_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_INFINITE, // infinite light type black, gray, black, // color for diffuse term only NULL, &dlight_dir, // need direction only 0,0,0, // no need for attenuation 0,0,0); // spotlight info NA VECTOR4D plight_pos = {0,200,0,1}; // point light Init_Light_LIGHTV2(lights2, POINT_LIGHT_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_POINT, // pointlight type black, green, black, // color for diffuse term only &plight_pos, NULL, // need pos only 0,.001,0, // linear attenuation only 0,0,1); // spotlight info NA // point light Init_Light_LIGHTV2(lights2, POINT_LIGHT2_INDEX, LIGHTV2_STATE_ON, // turn the light on LIGHTV2_ATTR_POINT, // pointlight type black, blue, black, // color for diffuse term only &plight_pos, NULL, // need pos only 0,.002,0, // linear attenuation only 0,0,1); // spotlight info NA VECTOR4D slight2_pos = {0,200,0,1}; VECTOR4D slight2_dir = {-1,1,-1,1}; // create lookup for lighting engine RGB_16_8_IndexedRGB_Table_Builder(DD_PIXEL_FORMAT565, // format we want to build table for palette, // source palette rgblookup); // lookup table // create the z buffer Create_Zbuffer(&zbuffer, WINDOW_WIDTH, WINDOW_HEIGHT, ZBUFFER_ATTR_32BIT); // load background sounds wind_sound_id = DSound_Load_WAV("WIND.WAV"); // start the sounds DSound_Play(wind_sound_id, DSBPLAY_LOOPING); DSound_Set_Volume(wind_sound_id, 100); #if 0 // load in the cockpit image Load_Bitmap_File(&bitmap16bit, "lego01.BMP"); Create_BOB(&cockpit, 0,0,800,600,1, BOB_ATTR_VISIBLE | BOB_ATTR_SINGLE_FRAME, DDSCAPS_SYSTEMMEMORY, 0, 16); Load_Frame_BOB16(&cockpit, &bitmap16bit,0,0,0,BITMAP_EXTRACT_MODE_ABS); Unload_Bitmap_File(&bitmap16bit); #endif // set single precission //_control87( _PC_24, MCW_PC ); // return success return(1); } // end Game_Init
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping varsIable char filename[80]; // used to build up filenames // seed random number generate srand(Start_Clock()); // initialize directdraw, very important that in the call // to setcooperativelevel that the flag DDSCL_MULTITHREADED is used // which increases the response of directX graphics to // take the global critical section more frequently DDraw_Init(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP, WINDOWED_APP); // load background image Load_Bitmap_File(&bitmap8bit, "GREENGRID24.BMP"); Create_Bitmap(&background_bmp,0,0,640,480,16); Load_Image_Bitmap16(&background_bmp, &bitmap8bit,0,0,BITMAP_EXTRACT_MODE_ABS); Unload_Bitmap_File(&bitmap8bit); // load the bitmaps Load_Bitmap_File(&bitmap8bit, "POOLBALLS24.BMP"); // create master ball Create_BOB(&balls[0],0,0,24,24,6,BOB_ATTR_MULTI_FRAME | BOB_ATTR_VISIBLE, DDSCAPS_SYSTEMMEMORY,0,16); // load the imagery in for (index=0; index < 6; index++) Load_Frame_BOB16(&balls[0], &bitmap8bit, index, index,0,BITMAP_EXTRACT_MODE_CELL); // create all the clones for (index=1; index < NUM_BALLS; index++) Clone_BOB(&balls[0], &balls[index]); // now set the initial conditions of all the balls for (index=0; index < NUM_BALLS; index++) { // set position in center of object balls[index].varsF[INDEX_X] = RAND_RANGE( SHAPE_CENTER_X-50, SHAPE_CENTER_X+50); balls[index].varsF[INDEX_Y] = RAND_RANGE( SHAPE_CENTER_Y-50, SHAPE_CENTER_Y+50); do { // set initial velocity balls[index].varsF[INDEX_XV] = RAND_RANGE(-100, 100)/30; balls[index].varsF[INDEX_YV] = RAND_RANGE(-100, 100)/30; } while (balls[index].varsF[INDEX_XV]==0 && balls[index].varsF[INDEX_XV]==0); // set ball color balls[index].curr_frame = rand()%6; } // end for index // unload bitmap image Unload_Bitmap_File(&bitmap8bit); // define points of shape VERTEX2DF shape_vertices[10] = { 328-SHAPE_CENTER_X,60-SHAPE_CENTER_Y, 574-SHAPE_CENTER_X,162-SHAPE_CENTER_Y, 493-SHAPE_CENTER_X,278-SHAPE_CENTER_Y, 605-SHAPE_CENTER_X,384-SHAPE_CENTER_Y, 484-SHAPE_CENTER_X,433-SHAPE_CENTER_Y, 306-SHAPE_CENTER_X,349-SHAPE_CENTER_Y, 150-SHAPE_CENTER_X,413-SHAPE_CENTER_Y, 28-SHAPE_CENTER_X,326-SHAPE_CENTER_Y, 152-SHAPE_CENTER_X,281-SHAPE_CENTER_Y, 73-SHAPE_CENTER_X,138-SHAPE_CENTER_Y }; // initialize shape shape.state = 1; // turn it on shape.num_verts = 10; shape.x0 = SHAPE_CENTER_X; shape.y0 = SHAPE_CENTER_Y; shape.xv = 0; shape.yv = 0; shape.color = RGB16Bit(0,255,0); // green shape.vlist = new VERTEX2DF [shape.num_verts]; for (index = 0; index < shape.num_verts; index++) shape.vlist[index] = shape_vertices[index]; // hide the mouse if (!WINDOWED_APP) ShowCursor(FALSE); // initialize directinput DInput_Init(); // acquire the keyboard only DInput_Init_Keyboard(); // build the 360 degree look ups Build_Sin_Cos_Tables(); // initilize DirectSound DSound_Init(); // load background sounds ball_ids[0] = DSound_Load_WAV("PBALL.WAV"); // clone sounds for (index=1; index<8; index++) ball_ids[index] = DSound_Replicate_Sound(ball_ids[0]); // return success return(1); } // end Game_Init
int Game_Init(void *parms) { // this function is where you do all the initialization // for your game int index; // looping varsIable char filename[80]; // used to build up filenames // seed random number generate srand(Start_Clock()); // start up DirectDraw (replace the parms as you desire) DDraw_Init(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP); // load background image Load_Bitmap_File(&bitmap8bit, "TANKGRID.BMP"); Create_Bitmap(&background_bmp,0,0,640,480); Load_Image_Bitmap(&background_bmp, &bitmap8bit,0,0,BITMAP_EXTRACT_MODE_ABS); Set_Palette(bitmap8bit.palette); Unload_Bitmap_File(&bitmap8bit); // hide the mouse ShowCursor(FALSE); // initialize directinput DInput_Init(); // acquire the keyboard only DInput_Init_Keyboard(); // initilize DirectSound DSound_Init(); // load background sounds cannon_ids[0] = DSound_Load_WAV("CANNON.WAV"); // clone sounds for (index=1; index < 8; index++) cannon_ids[index] = DSound_Replicate_Sound(cannon_ids[0]); // define points of cannon VERTEX2DF cannon_vertices[4] = { 0,-2, 30,0, 30,2, 0,2, }; // initialize ship cannon.state = 1; // turn it on cannon.num_verts = 4; cannon.x0 = CANNON_X0; // position it cannon.y0 = CANNON_Y0; cannon.xv = 0; cannon.yv = 0; cannon.color = 250; // green cannon.vlist = new VERTEX2DF [cannon.num_verts]; for (index = 0; index < cannon.num_verts; index++) cannon.vlist[index] = cannon_vertices[index]; // build the 360 degree look ups Build_Sin_Cos_Tables(); // initialize the missiles Init_Projectiles(); // set clipping rectangle to screen extents so objects dont // mess up at edges RECT screen_rect = {0,0,screen_width,screen_height}; lpddclipper = DDraw_Attach_Clipper(lpddsback,1,&screen_rect); // set clipping region min_clip_x = 0; max_clip_x = screen_width - 1; min_clip_y = 0; max_clip_y = screen_height - 1; // return success return(1); } // end Game_Init
static void init() { Build_Sin_Cos_Tables(); RGB16Bit = RGB16Bit565; //glClearColor(0, 0, 0, 1); //glEnable(GL_CULL_FACE); //glCullFace(GL_BACK); //glEnable(GL_DEPTH_TEST); //glDepthFunc(GL_LESS); //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); VECTOR4D cam_pos = {0, 40, 40, 1}; VECTOR4D cam_dir = {0, 0, 0, 1}; VECTOR4D cam_tar = { 0, 0, 0, 1}; Init_CAM4DV1(&cam, CAM_MODEL_EULER, &cam_pos, &cam_dir, &cam_tar, 1.0f, 12000.0f, 90, WINDOW_WIDTH, WINDOW_HEIGHT); VECTOR4D vscale = { 1.0f, 1.0f, 1.0f, 1.0f }; VECTOR4D vpos = { 0.0f, 0, 0, 1.0f }; VECTOR4D vrot = { 0.0f, 180.0f, 0.0f, 1.0f }; //Load_OBJECT4DV1_PLG(&obj, "model/towerg1.plg", &vScale, &vPos, &vRot); // load the master tank object VECTOR4D_INITXYZ(&vscale, 0.75, 0.75, 0.75); Load_OBJECT4DV1_PLG(&obj_tank, "model/tank2.plg", &vscale, &vpos, &vrot); // load player object for 3rd person view VECTOR4D_INITXYZ(&vscale, 0.75, 0.75, 0.75); Load_OBJECT4DV1_PLG(&obj_player, "model/tank3.plg", &vscale, &vpos, &vrot); // load the master tower object VECTOR4D_INITXYZ(&vscale, 1.0, 2.0, 1.0); Load_OBJECT4DV1_PLG(&obj_tower, "model/tower1.plg", &vscale, &vpos, &vrot); // load the master ground marker VECTOR4D_INITXYZ(&vscale, 3.0, 3.0, 3.0); Load_OBJECT4DV1_PLG(&obj_marker, "model/marker1.plg", &vscale, &vpos, &vrot); // position the tanks for (int index = 0; index < NUM_TANKS; index++) { // randomly position the tanks tanks[index].x = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); tanks[index].y = 0; // obj_tank.max_radius; tanks[index].z = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); tanks[index].w = RAND_RANGE(0, 360); } // end for // position the towers for (int index = 0; index < NUM_TOWERS; index++) { // randomly position the tower towers[index].x = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); towers[index].y = 0; // obj_tower.max_radius; towers[index].z = RAND_RANGE(-UNIVERSE_RADIUS, UNIVERSE_RADIUS); } // end for RGBAV1 ambient; ambient.a = 255; ambient.r = 128; ambient.g = 128; ambient.b = 128; RGBAV1 diffuse; diffuse.a = 255; diffuse.r = 255; diffuse.g = 255; diffuse.b = 255; RGBAV1 specular; specular.a = 255; specular.r = 255; specular.g = 255; specular.b = 255; VECTOR4D lightPos = {200, 200, 200, 1}; VECTOR4D lightDir = { 1, 1, 1, 1 }; //Init_Light_LIGHTV1(0, LIGHTV1_STATE_ON, LIGHTV1_ATTR_AMBIENT, ambient, diffuse, specular, &lightPos, &lightDir, 0, 0, 0, 0, 0, 0); Init_Light_LIGHTV1(0, LIGHTV1_STATE_ON, LIGHTV1_ATTR_INFINITE, ambient, diffuse, specular, &lightPos, &lightDir, 0, 0, 0, 0, 0, 0); //Init_Light_LIGHTV1(0, LIGHTV1_STATE_ON, LIGHTV1_ATTR_POINT, ambient, diffuse, specular, &lightPos, &lightDir, 1, 0, 0, 0, 0, 0); //Init_Light_LIGHTV1(0, LIGHTV1_STATE_ON, LIGHTV1_ATTR_SPOTLIGHT1, ambient, diffuse, specular, &lightPos, &lightDir, 1, 0, 0, 5, 20, 10); //Init_Light_LIGHTV1(0, LIGHTV1_STATE_ON, LIGHTV1_ATTR_SPOTLIGHT2, ambient, diffuse, specular, &lightPos, &lightDir, 1, 0, 0, 30, 60, 10); //LoadBmp(); //indexBuffer = new GLuint[obj.num_polys * 3]; //glGenVertexArrays(NumVAOs, VAOs); //glBindVertexArray(VAOs[VAO_1]); //glGenBuffers(NumBuffers, Buffers); //glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]); //glBufferData(GL_ARRAY_BUFFER, sizeof(POINT4D)* obj.num_vertices, NULL, GL_DYNAMIC_DRAW); // //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, Buffers[ElementBuffer]); //glVertexAttribPointer(vPosition, 4, GL_FLOAT, GL_FALSE, 0, 0); //glEnableVertexAttribArray(vPosition); //ShaderInfo shaders[] = { // { GL_VERTEX_SHADER, "shader/common.vert" }, // { GL_FRAGMENT_SHADER, "shader/common.frag" }, // { GL_NONE, NULL } //}; //GLuint program = LoadShaders(shaders); //glUseProgram(program); }