rand_rect_iterator::rand_rect_iterator(const coord_def &start_, int x_size_, int y_size_, bool no_inside): start(start_),current(0),x_size(x_size_),y_size(y_size_) { for(int i=-x_size; i<=x_size; i++) { for(int j=-y_size; j<=y_size; j++) { if(!no_inside || j != 0 || i != 0) dq.push_back(coord_def(i+start.x,j+start.y)); } } rand_shuffle(dq.begin(),dq.end()); }
static inline uint16_t IpId_Next () { #ifdef REG_TEST uint16_t id = htons(s_id_index + 1); #else uint16_t id = s_id_pool[s_id_index]; #endif s_id_index = (s_id_index + 1) % IP_ID_COUNT; if ( !s_id_index ) rand_shuffle(s_rand, s_id_pool, sizeof(s_id_pool), 1); return id; }
dif_rect_iterator::dif_rect_iterator(const coord_def &start_, int distan_, bool random_): start(start_),current(0),distan(distan_) { deque<coord_def> temp; for(int i=-distan; i<=distan; i++) { for(int j=-distan; j<=distan; j++) { if(abs(i)+abs(j) != distan_*2 || distan_ == 0) temp.push_back(coord_def(i+start.x,j+start.y)); } } rand_shuffle(temp.begin(),temp.end()); for(unsigned int i=0;i<temp.size();i++) dq.push_back(temp[i]); if(!random_) sort_distan(true); }
void MakeArtifact(item* item_, int good_bad_) { int num_ = 1+randA(1+randA(3)); deque<int> temp; for(int i=0; i<RGT_MAX; i++) { if(item_->type >= ITM_ARMOR_BODY_FIRST && item_->type < ITM_ARMOR_BODY_LAST) { if(ArmourExceptopn((armour_kind)item_->value5) == i) continue; } temp.push_back(i); } rand_shuffle(temp.begin(),temp.end()); for(int i = 0; i < num_ ; i++) { if(item_->value1 != temp[i] || item_->type != ITM_RING) { int gb_ = randA(3)?good_bad_:good_bad_*-1; item_->atifact_vector.push_back(atifact_infor(temp[i],GetAtifactValue((ring_type)temp[i],gb_))); } else num_++; } if(item_->type>=ITM_WEAPON_FIRST && item_->type<ITM_WEAPON_LAST) { item_->value4 = randA(9)+randA(3)+randA(3)-4; //item_->value3 = randA(9)+randA(3)+randA(3)-4; } if(item_->type>=ITM_ARMOR_FIRST && item_->type< ITM_ARMOR_LAST) { item_->value4 = randA(item_->value1)+randA(2)+randA(2)-2; } item_->second_name.name = "아티펙트 "; item_->second_name.name_type = false; }
void initMap() { map_list.dungeon_enter[TEMPLE].set(false,0,0,rand_int(2,5)); map_list.dungeon_enter[MISTY_LAKE].set(false,0,0,rand_int(7,9)); map_list.dungeon_enter[YOUKAI_MOUNTAIN].set(false,0,0,MISTY_LAKE_LEVEL+rand_int(1,2)); map_list.dungeon_enter[SCARLET_M].set(false,0,0,MISTY_LAKE_LEVEL+rand_int(3,4)); map_list.dungeon_enter[SCARLET_L].set(false,0,0,SCARLET_LEVEL+rand_int(1,2)); map_list.dungeon_enter[SCARLET_U].set(false,0,0,SCARLET_LEVEL_LAST_LEVEL); map_list.dungeon_enter[BAMBOO].set(false,0,0,rand_int(10,13)); map_list.dungeon_enter[SUBTERRANEAN].set(false,0,0,DEPTH_LEVEL+rand_int(1,3)); map_list.dungeon_enter[YUKKURI_D].set(false,0,0,YOUKAI_MOUNTAIN_LAST_LEVEL); map_list.dungeon_enter[DEPTH].set(false,0,0,MAX_DUNGEUN_LEVEL); map_list.dungeon_enter[DREAM_D].set(false,0,0,DEPTH_LEVEL+rand_int(1,3)); //map_list.dungeon_enter[MOON_D].set(false,0,0,rand_int(10,13)); map_list.dungeon_enter[PANDEMONIUM].set(false,0,0,DEPTH_LEVEL+rand_int(1,3)); map_list.dungeon_enter[HAKUREI_D].set(false,0,0,DEPTH_LAST_LEVEL); map_list.god_num = 10; map_list.bamboo_count = 0; map_list.bamboo_rate = 0; //map_list.tutorial = 0; map_list.bamboo_tewi = false; deque<int> dq; for(int i=0;i<GT_LAST;i++) { if(i != GT_SHIKIEIKI && i != GT_SEIJA) //세이자는 무조건 나온다. dq.push_back(i); } rand_shuffle(dq.begin(),dq.end()); for(int i=0;i<GT_LAST-map_list.god_num;i++) { map_list.temple[dq[i]].set(false,0,0,rand_int(1,5)); } map_list.temple[GT_SEIJA].set(false,0,0,rand_int(1,5)); //map_list.temple[GT_SUWAKO].set(false,0,0,0); }