Пример #1
0
bool Shot_gun::Action(Game_Manager* gm_)
{
	if(valid)
	{
		int coll_ = pre_collution(3);

		if(gm_)
		{
			for(list<Unit*>::iterator it = gm_->unit_list.begin();it != gm_->unit_list.end();it++)
			{
				if((*it)->isLive() && !(*it)->isNonTarget()  && (*it)->GetTeam() != GetTeam())
				{
					if(unit_collution((*it)->GetPos(), (*it)->GetSize()+((*it)->isPlayer()?0.0f:3.0f) ))
					{
						if (gm_->isPlayerCanHear(GetPos()))
						{
							PlaySE(se_bullet_flesh);
						}
						
						(*it)->SetKnockback(power, max_power, angle);
						if(slow_turn)
							(*it)->SlowApply(slow_ratio,slow_turn, SK_GUN);
						int final_damge_ = (*it)->SetDamage(gm_, GetFirstPos(), DT_BULLET, damage, GetTeam(), sniper, unit?unit->GetCritical():0);
						
						if(unit)
							unit->GiveDamage(gm_, (*it), DT_BULLET, final_damge_);
						valid = false;
						break;
					}
				}
			}
		}

		
		if(coll_)
		{
			SetPos(GetPos()+coord_def(cos(angle)*coll_, sin(angle)*coll_));
			valid = false;
			delay++;
		}
		else
			Move();
		distance -= const_speed;
		if(distance<0)
			valid = false;

	}
	
	if(valid && delay)
	{
		delay--;
	}
	else
	{
		delay_pos += GetSpeed();
		if(!valid)
		{
			if(const_delay < delay++)
				return true;
		}
	}
	return false;
}
Пример #2
0
void MainLoop()
{
	int a=0,b=0;
	while(1)
	{
		you.player_move = true;

		if(you.s_timestep)
		{
			turn_skip();
			Sleep(16);
			continue;
		}


		int char_ = waitkeyinput();

		you.prev_hp[1] = you.hp;
		you.prev_mp[1] = you.mp;
		switch(char_)
		{
		case 'j':
			Move(coord_def(you.position.x,you.position.y-1));  //위
			break;
		case 'k':
			Move(coord_def(you.position.x,you.position.y+1)); //아래
			break;
		case 'h':
			Move(coord_def(you.position.x-1,you.position.y)); //왼쪽
			break;
		case 'l':
			Move(coord_def(you.position.x+1,you.position.y)); //오른쪽
			break;
		case 'b':
			Move(coord_def(you.position.x-1,you.position.y+1));
			break;
		case 'n':
			Move(coord_def(you.position.x+1,you.position.y+1));
			break;
		case 'y':
			Move(coord_def(you.position.x-1,you.position.y-1));
			break;
		case 'u':
			Move(coord_def(you.position.x+1,you.position.y-1));
			break;
		case 'x': //주위탐색
			Search();
			break;
		case 's': //턴스킵
		case '.': //턴스킵
			turn_skip();
			break;
		case 'g':
		case ',': //줍기
			PickUp();
			break;
		case 'i': //아이템확인
			iteminfor();
			break;	
		case 'd': //아이템버리기
			iteminfor_discard();
			break;
		case 'D': //마지막에 먹은 아이템 버리기
			fast_discard();
			break;
		case 'w': //무기장착
			Equip_Weapon();
			break;
		case 'W': //방어구장착
			Equip_Armor();
			break;
		case 'T': //방어구해제
			Unequip_Armor();
			break;
		case 'C': //문닫기
			Close_door();
			break;
		case 'O': //문열기
			Open_door();
			break;
		case 'o': //자동이동
			auto_Move();
			break;
		case '5': //100턴넘기기
			long_rest();
			break;
		case 0x88: //컨트롤P - 로그
			view_log();
			break;
		case 15: //컨트롤o
			if(isNormalGame())
				dungeonView();
			break;
		case 'e': //먹기
			Eatting();
			break;
		case 'q': //마시기
			Drinking();
			break;
		case 'r': //읽기
			Reading();
			break;
		case 'm': //스킬정보창
			skill_view();
			break;
		case 'P': //장신구장착
			Equip_Jewelry();
			break;
		case 'R': //장신구해제
			Unequip_Jewelry();
			break;
		case 'S': //체크후 종료
			saveandcheckexit();
			break;
		case 0x89: //강제종료
			nosaveandexit();
			break;
		case 0x8A: //저장과 종료
			saveandexit();
			break;
		case 'X': //넓은탐색
			Wide_Search();
			break;
		case 'f': //던지기(빠른)
			Quick_Throw(you.GetThrowIter(),you.GetTargetIter());
			break;
		case 'F': //던지기(선택)
			Select_Throw();
			break;
		case '\\': //식별템 확인
			Iden_Show();
			break;
		case '>':
			Stair_move(true);
			break;
		case '<':
			Stair_move(false);
			break;
		case '%':
			stat_view();
			break;
		case '}':
			Weapon_Show();
			break;
		case '[':
			Armour_Show();
			break;
		case ']':
			rune_Show();
			break;
		case '\"':
			Amulet_Show();
			break;
		case '@':
			Simple_State_Show();
			break;
		case 'N':
			//sendScore();
			break;
		case 'E':
			Experience_Show();
			break;
		//case 'c':
		//	Spelllcard_Declare();
		//	//Eat_Power();
		//	break;
		case 'v':
		case 'V':
			Spelllcard_Evoke();
			break;
		case 'p':
			Pray();
			break;
		case '#':
			if(isNormalGame() && Dump(0,NULL))
				printlog("덤프에 성공했습니다.",true,false,false,CL_normal);
			break;
		case 'Z':
		case 'z':
			SpellUse();
			break;
		case 'I':
			SpellView();
			break;
		case 'a':
			SkillUse();
			break;
		case 'A':
			PropertyView();
			break;
		case 'M':
			run_spell();
			break;
		case 't':
			shout();
			break;
		case '^':
			God_show();
			break;
		case '&': //위자드모드!
			//waitkeyinput();
			wiz_mode();
			break;
		case '_':
			save_mode();
			break;
		case 0x8B:
			auto_pick_onoff(false);
			break;
		case '?'://도움말
			Help_Show();
			break;
		case VK_ESCAPE://esc
			escape();
			break;
		case VK_TAB:
			auto_battle();
			break;
		default:
			break;
		}
	}
}
Пример #3
0
Shot_gun::Shot_gun(Texture* texture_, Unit* unit_, float damage_, float sniper_, float power_, float max_power_, int team_, coord_def pos_, float angle_, float speed_, float distance_, int slow_turn_, float slow_ratio_, int delay_):
Shot_base(texture_, unit_, team_, pos_, coord_def(cos(angle_)*speed_, sin(angle_)*speed_)), 
damage(damage_), sniper(sniper_), power(power_), max_power(max_power_), const_delay(delay_), distance(distance_), 
delay(delay_), delay_pos(pos_), valid(true), angle(angle_), slow_turn(slow_turn_), slow_ratio(slow_ratio_),const_speed(speed_)
{
}
Пример #4
0
float Sub_Trap::Shot(Game_Manager* gm_, Unit* User_, int team_, const coord_def& start_, const coord_def& pos_, float focus_)
{
	float angle_ = GetAngleToTarget(start_, pos_);
	float x_ = start_.x + cos(angle_)*15.0f;
	float y_ = start_.y + sin(angle_)*15.0f;
	gm_->shot_list.push_back(new Shot_trap(&tex_trap, User_, 0.2f, 150, 70, 1200, team_, coord_def(x_,y_)));
	if(!UpDownNum(-1))
	{
		GetPlayer()->DeleteSubWeapon(this, -1);
		delete this; //끝나면 이걸 지움. 제대로 동작되나?
	}
	return 10;
}
Пример #5
0
bool PixedMap(map_dummy* map, char *temp)
{

	map->tiles = new dungeon_tile_type*[map->size_x*2+1];
	for(int i=0;i<map->size_x*2+1;i++)
		map->tiles[i] = new dungeon_tile_type[map->size_y*2+1];


	for(int i=0,j=0;temp[j]!='\0';j++)
	{
		if(i>=(map->size_x*2+1)*(map->size_y*2+1))
		{
			break;
		}
		if(temp[j]!=' ')
		{
			switch(temp[j])
			{
			case '.':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = map->floor_tex;
				break;
			case '#':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = map->wall_tex;
				break;
			case ',':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_FLOOR;
				break;
			case '_':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_GRASS;
				break;
			case '@':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_WALL;
				break;
			case '$':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_METAL_WALL;
				break;
			case '[':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_BAMBOO_WALL;
				break;
			case '+':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_CLOSE_DOOR;
				break;	
			case '=':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_GLASS;
				break;
			case '&':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_STATUE;
				break;
			case 'E':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_BOOK_WALL;
				break;				
			case '~':
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_SEA;
				break;	
			case 'i': //각 던전에서 드랍되는 아이템을 넣음
				{
					item_infor t;
					CreateFloorItem(map->floor,&t);
					map->item_list.push_back(mapdummy_item(t,coord_def(i%(map->size_x*2+1)-map->size_x,i/(map->size_x*2+1)-map->size_y)));
					map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = map->floor_tex;
				}
				break;	

			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
			{
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = map->sp_tile_list[temp[j]-'0'];

				if(map->sp_tile_list[temp[j]-'0']>= DG_SUB_STAIR_FIRST && map->sp_tile_list[temp[j]-'0'] < DG_SUB_STAIR_MAX)
				{//특수 지형이 만약 서브던젼 계단입구일 경우
					int stiar_enter_ = map->sp_tile_list[temp[j]-'0'] - DG_SUB_STAIR_FIRST;
					if(stiar_enter_>=SUBTERRANEAN)
						stiar_enter_--;
					if(stiar_enter_>=PANDEMONIUM)
						stiar_enter_--;
					//map_list.dungeon_enter[stiar_enter_].detected = true;
					map_list.dungeon_enter[stiar_enter_].pos = coord_def(i%(map->size_x*2+1)-map->size_x,i/(map->size_x*2+1)-map->size_y);
					map_list.dungeon_enter[stiar_enter_].pos += map->pos;
				}
				break;
			}
			default:
				map->tiles[i%(map->size_x*2+1)][i/(map->size_x*2+1)] = DG_FLOOR2;
				break;
			}
			i++;
		}	
	}
	map->m_entrance+=map->pos;
	map->m_exit+=map->pos;

	return true;
}
Пример #6
0
float SdfRenderer::y2_def(QDomElement &element)
{
	return coord_def(element, "y2", current_size_y, first_size_y) + mStartY;
}
Пример #7
0
float SdfRenderer::x2_def(QDomElement &element)
{
	return coord_def(element, "x2", current_size_x, first_size_x) + mStartX;
}
Пример #8
0
Shot_net::Shot_net(Texture* texture_, Unit* unit_, int net_time_, int team_, coord_def pos_, float angle_, float speed_, float distance_):
Shot_base(texture_, unit_, team_, pos_, coord_def(cos(angle_)*speed_, sin(angle_)*speed_)), 
net_time(net_time_), distance(distance_), valid(true), angle(angle_), const_speed(speed_)
{
}