FILESPR.CPP
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:4k
源码类别:

游戏

开发平台:

Visual C++

  1. #include "ray.h"
  2. #include "globals.h"
  3. #include "rayfile.h"
  4. #include "resnames.h"
  5. #include "rayspr.h"
  6. #include "utils.h"
  7. #include "sprfunc.h"
  8. #include "fixed.h"
  9. void Clear_Obj_Types();
  10. BOOL obj_types_loaded=FALSE;
  11. void F_Get_Object_Types()
  12. {
  13.    if (obj_types_loaded)
  14.       Clear_Obj_Types();
  15.    obj_types_loaded=TRUE;
  16.    short dir_index=F_Find_And_Setup((PCHAR)OBJECT_TYPE_RES,
  17.         (void * *)&Obj_Type_List, sizeof(object_type));
  18.    if (dir_index==-1)
  19.       return;
  20.    Number_Of_OTs=directory[dir_index].length;
  21.  
  22.    Clear_Objects();
  23.    short counter, cur_texture;
  24.    object_type * cur_obj_type;
  25.    short temp_short;
  26.    long extra_data_offset, cur_pos;
  27.    for (counter=0; counter<Number_Of_OTs; counter++) {
  28.       cur_obj_type=Obj_Type_List+counter;
  29.       F_Get_ULong(cur_obj_type->obj_class);
  30.       F_Get_Short(cur_obj_type->stats.total_health);
  31.       F_Get_Short(cur_obj_type->stats.base_speed);
  32.       F_Get_Long(cur_obj_type->stats.sight_dis);
  33.       cur_obj_type->stats.other_stats=NULL;
  34.       F_Get_UShort(cur_obj_type->angle_num);
  35.    
  36.       cur_obj_type->frames=(ptexture *)NewPtr((cur_obj_type->angle_num) * sizeof(ptexture));
  37.       cur_obj_type->rev_frames=(BOOL *)NewPtr((cur_obj_type->angle_num) * sizeof(BOOL));
  38.       for (cur_texture=0; cur_texture < cur_obj_type->angle_num ; cur_texture++) {
  39.          F_Get_Short(cur_obj_type->frames[cur_texture]);
  40.          F_Get_Short(temp_short);
  41.          if (temp_short==0)
  42.             cur_obj_type->rev_frames[cur_texture]=FALSE;
  43.          else cur_obj_type->rev_frames[cur_texture]=TRUE;
  44.       } /* endfor */
  45.       F_Get_UShort(cur_obj_type->width);
  46.       F_Get_UShort(cur_obj_type->height);
  47.       F_Get_UShort(cur_obj_type->eye_height);
  48.       F_Get_UShort(cur_obj_type->stepping_height);
  49.       F_Get_Short(temp_short);
  50.       cur_obj_type->obj_width=convtoMYFIXED(temp_short);
  51.       F_Get_Short(temp_short);
  52.       cur_obj_type->block_width=convtoMYFIXED(temp_short);
  53.       // setup various fields used for rendering
  54.       cur_obj_type->half_angle=ANGLE_360/(cur_obj_type->angle_num*2);
  55.       cur_obj_type->wshift=Check2Shift(cur_obj_type->width);
  56.       cur_obj_type->hshift=Check2Shift(cur_obj_type->height);
  57.       if (cur_obj_type->wshift > cur_obj_type->hshift) {
  58.          cur_obj_type->wh_ratio=cur_obj_type->wshift - cur_obj_type->hshift;
  59.       } else {
  60.          cur_obj_type->wh_ratio=cur_obj_type->hshift - cur_obj_type->wshift;
  61.       }
  62.       F_Get_Short(temp_short);
  63.       cur_obj_type->Update_Z=Get_Update_Z_Func(temp_short);
  64.       F_Get_Short(temp_short);
  65.       cur_obj_type->Load_Extra=Get_Load_Extra_Func(temp_short);
  66.       F_Get_Short(temp_short);
  67.       cur_obj_type->Update=Get_Update_Func(temp_short);
  68.       F_Get_Short(temp_short);
  69.       cur_obj_type->Message_Func=Get_Message_Func(temp_short);
  70.       F_Get_Short(temp_short);
  71.       cur_obj_type->Render_Func=Get_Render_Func(temp_short);
  72.  
  73.       F_Get_Short(temp_short);
  74.       cur_obj_type->Render_Data_Loader=Get_Render_Data_Loader(temp_short);
  75.       F_Get_Long(extra_data_offset);
  76.       cur_pos=F_Abs_Pos();
  77.       cur_obj_type->Render_Data_Loader(cur_obj_type, extra_data_offset);
  78.       F_Seek_Abs(cur_pos);
  79.    } /* endfor */
  80. }
  81. void F_Get_Objects()
  82. {
  83.    short dir_index=F_Find_Dir((PCHAR)OBJECT_RES);
  84.    if (dir_index==-1)
  85.       return;
  86.    long object_count=directory[dir_index].length;
  87.    F_Seek(directory[dir_index].start);
  88.    short counter, type;
  89.    long x, y, z;
  90.    ULONG team;
  91.    angle_type angle;
  92.    pobject cur_object;
  93.    long extra_data_offset, cur_pos;
  94.    Clear_Objects();
  95.    for (counter=0; counter<object_count; counter++) {
  96.       F_Get_Long(x);
  97.       F_Get_Long(y);
  98.       F_Get_Long(z);
  99.       F_Get_Long(angle);
  100.       F_Get_Short(type);
  101.       F_Get_ULong(team);
  102.       cur_object=Create_Object(x<<SHIFT,y<<SHIFT,z,angle,type,NULL, team);
  103.       // was an invalid object created
  104.       if (cur_object==NULL)
  105.          continue;
  106.       F_Get_Long(extra_data_offset);
  107.       cur_pos=F_Abs_Pos();
  108.       cur_object->type->Load_Extra(cur_object, extra_data_offset);
  109.       F_Seek_Abs(cur_pos);
  110.    } /* endfor */
  111. }
  112. void Clear_Obj_Types() {
  113.    DelPtr( Obj_Type_List);
  114.    obj_types_loaded=FALSE;
  115. }