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

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

?? filedoom.cpp

?? Demo Source for a doom like engine using raycasting and voxel
?? 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一区二区三区免费野_久草精品视频
日本午夜一本久久久综合| 久久久精品影视| 91精品一区二区三区久久久久久| 日韩视频永久免费| 欧美激情一区在线| 尤物av一区二区| 久久www免费人成看片高清| 成人av网址在线| 欧美视频自拍偷拍| 久久精品视频在线看| 亚洲美女视频在线观看| 美女久久久精品| 99久久免费国产| 日韩天堂在线观看| 亚洲精品免费视频| 国产一区二区精品久久91| 色婷婷久久久久swag精品| 日韩女优制服丝袜电影| 亚洲人成网站在线| 日本精品一区二区三区高清| 91精品免费在线观看| 亚洲国产精品v| 蜜臀久久99精品久久久久宅男 | 欧美日韩你懂的| 久久噜噜亚洲综合| 日日摸夜夜添夜夜添精品视频| 高清在线观看日韩| 欧美一区二区成人| 日韩一区在线免费观看| 国产在线精品免费| 欧美日韩日本视频| 亚洲三级在线播放| 高清成人免费视频| 欧美不卡一区二区三区| 亚洲成人免费影院| 91免费国产在线| 国产午夜精品久久久久久久| 亚洲成av人片在线| 色屁屁一区二区| 中文文精品字幕一区二区| 麻豆一区二区在线| 欧美日韩久久久| 亚洲欧美日韩在线| 成人精品国产一区二区4080| 欧美tk丨vk视频| 日本在线不卡视频| 欧美无砖专区一中文字| 亚洲女子a中天字幕| 成人精品免费网站| 久久久久久久免费视频了| 日本在线不卡视频| 9191久久久久久久久久久| 亚洲久本草在线中文字幕| 成年人网站91| 国产精品久久久久三级| 国产精品一二三| 日韩精品一区二区三区老鸭窝 | 日韩久久久久久| 日韩主播视频在线| 日韩毛片精品高清免费| 日本系列欧美系列| 色诱视频网站一区| 亚洲国产高清在线| 国产麻豆精品视频| 2024国产精品视频| 精品一区中文字幕| 欧美一级在线免费| 日韩成人精品视频| 日韩亚洲欧美在线| 美国十次综合导航| 26uuu另类欧美| 国产成人av影院| 久久品道一品道久久精品| 精品制服美女丁香| 2021中文字幕一区亚洲| 国产成人激情av| 欧美国产精品专区| 国产91精品免费| 亚洲四区在线观看| 欧美中文字幕一区二区三区| 亚瑟在线精品视频| 日韩精品一区二区三区三区免费| 精品一区二区三区欧美| 久久精品亚洲精品国产欧美| 不卡一区二区在线| 亚洲丝袜自拍清纯另类| 欧美xxxxx裸体时装秀| 久久91精品国产91久久小草 | 日韩av在线播放中文字幕| 欧美一级视频精品观看| 美日韩一区二区| 日韩一区二区免费视频| 伦理电影国产精品| 精品久久久影院| 国内精品免费**视频| 欧美激情一区二区在线| 91视频观看免费| 一区二区三区中文字幕| 在线播放一区二区三区| 久久 天天综合| 中文字幕精品一区二区三区精品| 色激情天天射综合网| 免费观看日韩电影| 精品国产亚洲一区二区三区在线观看| 国产精品资源在线看| 亚洲私人黄色宅男| 欧美日韩一区二区不卡| 狠狠网亚洲精品| 亚洲人成人一区二区在线观看| 91.xcao| 国产一区二区三区免费在线观看| 自拍偷拍欧美激情| 欧美一区日韩一区| 国产精品456露脸| 亚洲精品成人天堂一二三| 欧美精品久久天天躁| 国产成人自拍网| 一区二区在线免费观看| 精品日韩一区二区三区| 91色九色蝌蚪| 九色|91porny| 亚洲男人都懂的| 69精品人人人人| 懂色一区二区三区免费观看| 一区二区在线免费| 精品福利视频一区二区三区| 成人av在线看| 视频一区二区三区入口| 国产精品二三区| 欧美电影精品一区二区| 91浏览器打开| 国产在线不卡视频| 亚洲动漫第一页| 欧美中文字幕一区二区三区| 国产精品视频看| 一本色道久久综合亚洲aⅴ蜜桃 | 国产美女在线精品| 亚洲综合一区二区三区| 久久视频一区二区| 99免费精品在线| 日韩一区精品字幕| 中文字幕一区二区三| 精品国产污网站| 色综合婷婷久久| 美腿丝袜亚洲色图| 亚洲免费在线电影| 日韩欧美在线不卡| 日本道色综合久久| 黄色资源网久久资源365| 亚洲欧洲精品成人久久奇米网| 欧美日韩国产一级| av中文字幕亚洲| 国产一区二区在线视频| 亚洲色欲色欲www| 国产视频亚洲色图| 日韩区在线观看| 久久女同互慰一区二区三区| 欧美亚洲愉拍一区二区| 国产精品69久久久久水密桃| 午夜久久久久久电影| 成人欧美一区二区三区1314| 久久青草欧美一区二区三区| 欧美这里有精品| 中文无字幕一区二区三区| 欧美日韩国产a| 99精品欧美一区二区三区小说 | 国产精品123| 久久精品国产免费| 日韩 欧美一区二区三区| 亚洲丝袜精品丝袜在线| 欧美国产欧美综合| 日本一区二区三区在线不卡| 国产亚洲欧美日韩日本| 久久伊人中文字幕| www国产成人| 欧美v日韩v国产v| 精品美女在线观看| 欧美精品一区二区三区蜜桃| 精品播放一区二区| 精品欧美久久久| 精品精品国产高清一毛片一天堂| 欧美mv日韩mv| 久久日韩精品一区二区五区| 国产亚洲欧美中文| 国产精品免费网站在线观看| 中文字幕国产一区二区| 久久久噜噜噜久久中文字幕色伊伊| 久久久久久久久一| 中文在线免费一区三区高中清不卡| 久久综合九色综合97婷婷女人| 精品理论电影在线观看| 久久色在线观看| 中文字幕精品三区| 国产精品国产三级国产普通话99 | 日韩高清不卡一区| 蜜臀精品一区二区三区在线观看| 精品一区二区三区影院在线午夜| 国产精品一区二区免费不卡| 成人性视频免费网站| 91丨九色丨尤物|