亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? filedoom.cpp

?? quake 游戲原代碼
?? CPP
字號:
#include "ray.h"
#include "globals.h"
#include "rayfile.h"
#include "doom.h"
#include "fixed.h"
#include "blockbsp.h"
#include "blockmap.h"
#include <stdlib.h>

inline ptexture Get_Rand_Texture()
{
short tex_result=1;
#ifdef RAND_TEX
short intermediate=rand();
tex_result+=((intermediate*(Number_Of_Textures-1))/32767);
if (tex_result>=Number_Of_Textures)
  tex_result=Number_Of_Textures-1;
#endif
return (ptexture)(tex_result);
}

void F_Doom_Load(char * filename)
{
F_D_Setup(filename);
base_index=0;
F_D_Load_World();
F_Close();
}

void F_D_Setup(char * filename)
{
binary_mode=TRUE;
fp.open(filename, ios::binary | ios::in | ios::out);
F_Seek(0);
fp.read(header.header, 4);
F_Get_Long(header.dir_entries);
F_Get_Long(header.dir_location);
F_Seek(header.dir_location);
directory=(dir_entry *)NewPtr(header.dir_entries * sizeof(dir_entry));
short counter;
dir_entry * cur_dir;
for (counter=0; counter < header.dir_entries; counter++) {
   cur_dir=directory+counter;
   F_Get_Long(cur_dir->start);
   F_Get_Long(cur_dir->length);
   F_Get_String(cur_dir->name, 8);
} /* endfor */
}

void F_D_Load_World()
{
if (world_loaded)
   F_Clear_World();
world_loaded=TRUE;
F_D_Get_Sectors();
F_D_Get_Vectors();
F_D_Get_SDs();
F_D_Get_LDs();
F_D_Get_Segs();
F_D_Get_SSectors();
F_D_Get_BSP();
F_D_Get_Player_Loc();
}

short F_D_Find_And_Setup(char * string, void * * table)
{
   short temp_index;
   if ((temp_index=F_Find_Dir(string))==-1)
      return temp_index;
   (*table)=(void *)NewPtr(directory[temp_index].length);
   F_Seek(directory[temp_index].start);
   fp.read((char*)(*table), directory[temp_index].length);
   return temp_index;
}

void F_D_Get_Sectors()
{
dm_sector * temp_sectors;
short dir_index=F_D_Find_And_Setup("SECTORS\0", (void * *)&temp_sectors);
if (dir_index==-1)
   return;

Number_Of_Sectors=(directory[dir_index].length/sizeof(dm_sector));
Sector_List=(sector *)NewPtr(Number_Of_Sectors * sizeof(sector));

short counter;
sector * cur_sec;
dm_sector * cur_dm_sec;

for (counter=0; counter<Number_Of_Sectors; counter++) {
   cur_sec=Sector_List+counter;
   cur_dm_sec=temp_sectors+counter;
   cur_sec->floor_height=cur_dm_sec->floor_ht;
   cur_sec->ceil_height=cur_dm_sec->ceiling_ht;
   cur_sec->tag=(USHORT)cur_dm_sec->trigger;
   cur_sec->light=((UCHAR) cur_dm_sec->light >> 4) + 
        ((UCHAR) cur_dm_sec->light & 0xf0);
   cur_sec->floor_tex=0;
   cur_sec->ceil_tex=0;
   cur_sec->flags=0;
}

DelPtr(temp_sectors);
}

void F_D_Get_Vectors()
{
dm_vertex * temp_vectors;
short dir_index=F_D_Find_And_Setup("VERTEXES",(void * *)&temp_vectors);
if (dir_index==-1)
   return;

Number_Of_Vectors=(directory[dir_index].length / sizeof(dm_vertex));
Vector_List=(vector2 *)NewPtr(Number_Of_Vectors * sizeof(vector2));

short counter;
vector2 * cur_vec;
dm_vertex * cur_dm_vec;
for (counter=0; counter < Number_Of_Vectors; counter++) {
   cur_vec=Vector_List+counter;
   cur_dm_vec=temp_vectors+counter;
   cur_vec->x=(long)cur_dm_vec->x;
   cur_vec->y=(long)cur_dm_vec->y;
}

DelPtr(temp_vectors);
}

void F_D_Get_SDs()
{
srand(rand());

dm_side * temp_sidedefs;
short dir_index=F_D_Find_And_Setup("SIDEDEFS",(void * *)&temp_sidedefs);
if (dir_index==-1)
   return;

Number_Of_Sidedefs=(directory[dir_index].length / sizeof(dm_side));
Sd_List=(sidedef *)NewPtr(Number_Of_Sidedefs * sizeof(sidedef));

short counter;
sidedef * cur_sd;
dm_side * cur_dm_sd;
for (counter=0; counter < Number_Of_Sidedefs; counter++) {
   cur_sd=Sd_List+counter;
   cur_dm_sd=temp_sidedefs+counter;
   cur_sd->attributes=0;
   cur_sd->x_offset=cur_dm_sd->tm_xoffset;
   cur_sd->y_offset=cur_dm_sd->tm_yoffset;
   cur_sd->sec=Sector_List+cur_dm_sd->sector;

   if (Cmp_Str_N(cur_dm_sd->main_tx, "-", 1))
      cur_sd->texture_normal=TEXTURE_NULL;
   else cur_sd->texture_normal=Get_Rand_Texture();

   if (Cmp_Str_N(cur_dm_sd->upper_tx, "-", 1))
      cur_sd->texture_high=TEXTURE_NULL;
   else cur_sd->texture_high=Get_Rand_Texture();

   if (Cmp_Str_N(cur_dm_sd->lower_tx, "-", 1))
      cur_sd->texture_low=TEXTURE_NULL;
   else cur_sd->texture_low=Get_Rand_Texture();

} /* endfor */

DelPtr(temp_sidedefs);
}

void F_D_Get_LDs()
{
dm_line * temp_linedefs;
short dir_index=F_D_Find_And_Setup("LINEDEFS", (void * *)&temp_linedefs);
if (dir_index==-1)
   return;

Number_Of_Linedefs=(directory[dir_index].length / sizeof(dm_line));
Ld_List=(linedef *)NewPtr(Number_Of_Linedefs * sizeof(linedef));

short counter;
linedef * cur_ld;
dm_line * cur_dm_ld;
for (counter=0; counter < Number_Of_Linedefs; counter++) {
   cur_ld=Ld_List+counter;
   cur_dm_ld=temp_linedefs+counter;
   cur_ld->v[0]=cur_dm_ld->from;
   cur_ld->v[1]=cur_dm_ld->to;
   cur_ld->s[0]=Sd_List+cur_dm_ld->side[0];

   // Check to see if there is a second sidedef at all
   if (cur_dm_ld->side[1]!=-1)
      cur_ld->s[1]=Sd_List+cur_dm_ld->side[1];
   else cur_ld->s[1]=NULL;

   cur_ld->attributes=(USHORT)cur_dm_ld->flags;
   cur_ld->tag_type=(USHORT)cur_dm_ld->special;
   cur_ld->tag=(USHORT)cur_dm_ld->tag;

} /* endfor */
DelPtr(temp_linedefs);

Generate_Block_Map();

}

void F_D_Get_Segs()
{
dm_seg * temp_segs;
short dir_index=F_D_Find_And_Setup("SEGS\0\0\0\0", (void * *)&temp_segs);
if (dir_index==-1)
   return;

Number_Of_Segs=(directory[dir_index].length / sizeof(dm_seg));
Seg_List=(seg *)NewPtr(Number_Of_Segs * sizeof(seg));

short counter;
seg * cur_seg; dm_seg * cur_dm_seg;
for (counter=0; counter < Number_Of_Segs; counter++) {
   cur_seg=Seg_List+counter;
   cur_dm_seg=temp_segs+counter;
   cur_seg->v[0]=cur_dm_seg->from;
   cur_seg->v[1]=cur_dm_seg->to;
   cur_seg->angle=((long)cur_dm_seg->angle * ANGLE_360) / DM_ANGLE_360;
   cur_seg->ld=Ld_List+cur_dm_seg->line;
   cur_seg->left_sidedef=(BOOL)cur_dm_seg->line_side;
   cur_seg->linedef_offset=(LONG)cur_dm_seg->line_offset;
} /* endfor */

DelPtr(temp_segs);
}

void F_D_Get_SSectors()
{
dm_ssector * temp_ssectors;
short dir_index=F_D_Find_And_Setup("SSECTORS", (void * *)&temp_ssectors);
if (dir_index==-1)
   return;

Number_Of_SSectors=(directory[dir_index].length / sizeof(dm_ssector));
SS_List=(ssector *)NewPtr(Number_Of_SSectors * sizeof(ssector));

short counter;
ssector * cur_ss;
dm_ssector * cur_dm_ss;
for (counter=0; counter < Number_Of_SSectors; counter++) {
   cur_ss=SS_List+counter;
   cur_dm_ss=temp_ssectors+counter;
   cur_ss->seg_start=cur_dm_ss->first_seg;
   cur_ss->seg_end=cur_ss->seg_start+cur_dm_ss->num_segs-1;
   Doom_Sort_SSector(cur_ss);
   cur_ss->num_objects=0;
   cur_ss->objects=NULL;
   cur_ss->flags=0;
} /* endfor */

DelPtr(temp_ssectors);
}

void F_D_Get_BSP()
{
dm_node * temp_nodes;
short dir_index=F_D_Find_And_Setup("NODES\0\0\0", (void * *)&temp_nodes);
if (dir_index==-1)
   return;

Number_Of_Nodes=(directory[dir_index].length / sizeof(dm_node));
bsp_tree=(bsp_node *)NewPtr(Number_Of_Nodes * sizeof(bsp_node));

bsp_start_node=Number_Of_Nodes-1;

short counter;
bsp_node * cur_node;
dm_node * cur_dm_node;
prectl cur_rect;
for (counter=0; counter < Number_Of_Nodes; counter++) {
   cur_node=bsp_tree+counter;
   cur_dm_node=temp_nodes+counter;
   cur_node->x1=cur_dm_node->x;
   cur_node->y1=cur_dm_node->y;
   cur_node->x2=cur_node->x1 + cur_dm_node->dx;
   cur_node->y2=cur_node->y1 + cur_dm_node->dy;
   cur_rect=&(cur_node->left_bound);
   cur_rect->top=cur_dm_node->ly2;
   cur_rect->left=cur_dm_node->lx1;
   cur_rect->bottom=cur_dm_node->ly1;
   cur_rect->right=cur_dm_node->lx2;
   cur_rect=&(cur_node->right_bound);
   cur_rect->top=cur_dm_node->ry2;
   cur_rect->left=cur_dm_node->rx1;
   cur_rect->bottom=cur_dm_node->ry1;
   cur_rect->right=cur_dm_node->rx2;
   cur_node->left_child=cur_dm_node->left;
   cur_node->right_child=cur_dm_node->right;
} /* endfor */

DelPtr(temp_nodes);

Generate_BSP_Block();
}

void F_D_Get_Player_Loc()
{
dm_thing * temp_things;
short dir_index=F_D_Find_And_Setup("THINGS\0\0", (void * *)&temp_things);
if (dir_index==-1)
   return;

short num_things=(directory[dir_index].length / sizeof(dm_thing));

short counter;
dm_thing * cur_dm_thing;
for (counter=0; counter < num_things; counter++) {
   cur_dm_thing=temp_things+counter;
   if (cur_dm_thing->thing_type==PLAYER_START) {
/*      the_player->x=cur_dm_thing->x;
      the_player->y=cur_dm_thing->y;
      the_player->angle=0; */
   }
} /* endfor */

DelPtr(temp_things);
}

void Doom_Sort_SSector(ssector * cur_ss)
{
pseg cur_low, cur_test, seg_base;
seg_base=Seg_List+cur_ss->seg_start;
USHORT num_segs=cur_ss->seg_end - cur_ss->seg_start+1;
for (short i=0; i<(num_segs-1); i++) {
   cur_low=seg_base+i;
   for (short j=i+1; j<num_segs; j++) {
      cur_test=seg_base+j;
      if (cur_test->angle > cur_low->angle)
         Swap_Segs(cur_test, cur_low);
   } /* endfor */
} /* endfor */
}

void Swap_Segs(seg * base_seg, seg * swap_seg)
{
seg temp_seg;
memcpy(&temp_seg, base_seg, sizeof(seg));
memcpy(base_seg, swap_seg, sizeof(seg));
memcpy(swap_seg, &temp_seg, sizeof(seg));
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品区一区二区三区 | 成a人片亚洲日本久久| 亚洲免费av在线| 日韩免费在线观看| 9i在线看片成人免费| 久久精品免费观看| 亚洲综合色成人| 国产午夜精品一区二区三区嫩草| 欧美性猛交xxxx乱大交退制版| 国产呦精品一区二区三区网站| 亚洲激情六月丁香| 国产亚洲欧美中文| 欧美一区二区成人6969| 色婷婷国产精品久久包臀| 国产精品自拍毛片| 日韩电影在线免费观看| 亚洲日本在线a| 国产亚洲精品免费| 日韩欧美高清一区| 欧美日韩一区高清| 95精品视频在线| 国产成人福利片| 久久国产欧美日韩精品| 婷婷国产在线综合| 亚洲高清免费观看 | 在线综合亚洲欧美在线视频| 99re这里只有精品首页| 国产精品资源站在线| 日本成人在线电影网| 亚洲一区成人在线| 亚洲制服丝袜在线| 亚洲人成网站影音先锋播放| 欧美国产综合色视频| 久久精品日产第一区二区三区高清版| 337p亚洲精品色噜噜噜| 欧美日韩国产综合久久 | 国产三级久久久| 精品国产欧美一区二区| 欧美一级免费观看| 666欧美在线视频| 欧美精品日日鲁夜夜添| 欧美三级日韩在线| 欧美色图激情小说| 欧美日韩一级大片网址| 欧美老年两性高潮| 91精品欧美一区二区三区综合在 | 日本一区二区三区四区| 久久精品一二三| 国产日韩欧美a| 亚洲国产精品黑人久久久| 国产精品毛片久久久久久| 欧美国产精品v| 国产精品久久久久久久久免费桃花 | 欧美在线制服丝袜| 欧美日本一区二区| 欧美一区二区黄| 精品国产免费视频| 国产精品美女一区二区| 中文字幕欧美一区| 一个色妞综合视频在线观看| 亚洲午夜视频在线观看| 日本亚洲欧美天堂免费| 精品一区二区久久久| 丁香啪啪综合成人亚洲小说| 91偷拍与自偷拍精品| 欧美亚洲动漫精品| 日韩美女在线视频| 国产欧美精品在线观看| 亚洲精品综合在线| 日韩中文字幕一区二区三区| 美国三级日本三级久久99| 国产福利一区二区三区视频在线| 成人综合婷婷国产精品久久蜜臀| 99热这里都是精品| 欧美精品一级二级三级| 久久嫩草精品久久久精品一| 亚洲欧美在线另类| 日产欧产美韩系列久久99| 国产乱一区二区| 欧美伊人久久大香线蕉综合69| 欧美一级欧美三级在线观看| 中文久久乱码一区二区| 亚洲成国产人片在线观看| 国产综合一区二区| 欧美亚洲综合一区| 国产亚洲欧美日韩在线一区| 亚洲精品乱码久久久久久久久| 裸体一区二区三区| 91在线播放网址| 日韩欧美在线观看一区二区三区| 国产精品亲子乱子伦xxxx裸| 日本在线不卡视频| 99精品国产91久久久久久| 精品少妇一区二区三区在线视频| 国产精品女同互慰在线看| 亚洲不卡av一区二区三区| 亚洲图片自拍偷拍| 成人激情免费网站| 欧美日韩美少妇 | 欧美日韩国产欧美日美国产精品| 日韩欧美亚洲国产另类| 国产精品久久久久久户外露出| 一区二区三区成人在线视频 | 不卡视频在线看| 欧美视频在线一区二区三区 | 久久精品国产精品青草| 91蜜桃传媒精品久久久一区二区| 欧美三区在线观看| 国产亚洲成av人在线观看导航| 亚洲人成精品久久久久久| 男女性色大片免费观看一区二区| 成人黄色片在线观看| 色欲综合视频天天天| 国产女人18毛片水真多成人如厕| 亚洲国产精品精华液网站| 国产精品一区二区三区四区| 欧美色图片你懂的| 国产精品乱码一区二三区小蝌蚪| 日本视频一区二区三区| 国产一区二区三区最好精华液| 制服丝袜在线91| 亚洲特级片在线| 激情av综合网| 欧美日韩高清一区二区不卡| 国产精品成人一区二区三区夜夜夜| 日本欧洲一区二区| 91天堂素人约啪| 国产亚洲精品7777| 捆绑变态av一区二区三区| 欧美日韩中文字幕一区| 亚洲综合一二区| 成人午夜免费电影| 久久综合九色欧美综合狠狠| 日韩国产高清影视| 色狠狠桃花综合| 欧美国产激情二区三区| 亚洲一区二区在线免费看| 色视频成人在线观看免| 国产精品欧美精品| 精品一二三四在线| 欧美一区二区三区在线观看| 亚洲精品日韩专区silk| 国产999精品久久久久久 | 一区二区三区不卡在线观看| 国产91清纯白嫩初高中在线观看| 精品国产91洋老外米糕| 蜜臀久久久久久久| 欧美精选在线播放| 亚洲一区二区精品久久av| 色哟哟在线观看一区二区三区| 欧美国产激情二区三区| 粉嫩欧美一区二区三区高清影视| 久久品道一品道久久精品| 精品一区二区三区视频在线观看| 欧美色涩在线第一页| 日本va欧美va欧美va精品| 欧美一区二区三区在线看| 日本亚洲免费观看| 日韩精品最新网址| 久久av中文字幕片| 欧美国产1区2区| 91免费国产在线| 亚洲少妇屁股交4| 在线亚洲一区观看| 亚洲自拍偷拍图区| 欧美日本免费一区二区三区| 日韩高清一区在线| 欧美tk丨vk视频| 亚洲一区二区美女| www激情久久| 国产精品91一区二区| 国产精品久久久久久亚洲毛片 | 91美女视频网站| 亚洲成a人片在线不卡一二三区 | 国产欧美一区二区在线观看| 国产精品一二三区| 一区二区免费看| 911精品产国品一二三产区 | 成人av第一页| 亚洲午夜久久久久中文字幕久| 欧美一区二区精品久久911| 国产精一区二区三区| 亚洲美腿欧美偷拍| 777奇米成人网| 国产一区二区主播在线| 亚洲一区中文日韩| 日韩一本二本av| 国产在线国偷精品产拍免费yy| 国产女人18水真多18精品一级做| 国产91精品露脸国语对白| 日韩电影在线观看电影| 久久精品男人的天堂| 在线免费观看日韩欧美| 免费av成人在线| 中文欧美字幕免费| 日韩一本二本av| 99精品欧美一区| 久久国产日韩欧美精品| 中文字幕一区二区三区四区不卡| 日韩欧美一区二区三区在线|