示例#1
0
void Game_Event::Setup(RPG::EventPage* new_page) {
	bool from_null = page == NULL;
	page = new_page;

	// Free resources if needed
	if (interpreter) {
		// If the new page is null and the interpreter is running, it should
		// carry on executing its command list during this frame
		if (page)
			interpreter->Clear();
		Game_Map::ReserveInterpreterDeletion(interpreter);
		interpreter.reset();
	}

	if (page == NULL) {
		tile_id = 0;
		SetSpriteName("");
		SetSpriteIndex(0);
		SetDirection(RPG::EventPage::Direction_down);
		//move_type = 0;
		trigger = -1;
		list.clear();
		return;
	}
	SetSpriteName(page->character_name);
	SetSpriteIndex(page->character_index);

	tile_id = page->character_name.empty() ? page->character_index : 0;

	if (original_pattern != page->character_pattern) {
		pattern = page->character_pattern;
		original_pattern = pattern;
	}

	move_type = page->move_type;
	SetMoveSpeed(page->move_speed);
	SetMoveFrequency(page->move_frequency);
	max_stop_count = (GetMoveFrequency() > 7) ? 0 : (int)pow(2.0, 8 - GetMoveFrequency());
	original_move_frequency = page->move_frequency;
	original_move_route = page->move_route;
	SetOriginalMoveRouteIndex(0);

	bool last_direction_fixed = IsDirectionFixed() || IsFacingLocked();
	animation_type = page->animation_type;

	if (from_null || !(last_direction_fixed || IsMoving()) || IsDirectionFixed())
		SetSpriteDirection(page->character_direction);
	if (!IsMoving())
		SetDirection(page->character_direction);

	SetOpacity(page->translucent ? 160 : 255);
	SetLayer(page->layer);
	data.overlap_forbidden = page->overlap_forbidden;
	trigger = page->trigger;
	list = page->event_commands;

	if (trigger == RPG::EventPage::Trigger_parallel) {
		interpreter.reset(new Game_Interpreter_Map());
	}
}
示例#2
0
bool Game_Player::GetOnVehicle() {
	int front_x = Game_Map::XwithDirection(GetX(), GetDirection());
	int front_y = Game_Map::YwithDirection(GetY(), GetDirection());
	Game_Vehicle::Type type;

	if (Game_Map::GetVehicle(Game_Vehicle::Airship)->IsInPosition(GetX(), GetY()))
		type = Game_Vehicle::Airship;
	else if (Game_Map::GetVehicle(Game_Vehicle::Ship)->IsInPosition(front_x, front_y))
		type = Game_Vehicle::Ship;
	else if (Game_Map::GetVehicle(Game_Vehicle::Boat)->IsInPosition(front_x, front_y))
		type = Game_Vehicle::Boat;
	else
		return false;

	location.vehicle = type;
	location.preboard_move_speed = GetMoveSpeed();
	if (type != Game_Vehicle::Airship) {
		location.boarding = true;
		through = true;
		MoveForward();
		through = false;
	} else {
		location.aboard = true;
		SetMoveSpeed(GetVehicle()->GetMoveSpeed());
		SetDirection(RPG::EventPage::Direction_left);
	}

	walking_bgm = Game_System::GetCurrentBGM();
	GetVehicle()->GetOn();
	return true;
}
示例#3
0
bool Game_Player::GetOffVehicle() {
	if (InAirship()) {
		if (!AirshipLandOk(GetX(), GetY()))
			return false;
	}
	else {
		int front_x = Game_Map::XwithDirection(GetX(), GetDirection());
		int front_y = Game_Map::YwithDirection(GetY(), GetDirection());
		if (!CanWalk(front_x, front_y))
			return false;
	}

	Game_Map::GetVehicle((Game_Vehicle::Type) vehicle_type)->GetOff();
	if (InAirship())
		SetDirection(RPG::EventPage::Direction_down);
	else {
		// TODO
		// ForceMoveForward();
		opacity = 255;
	}

	vehicle_getting_off = true;
	SetMoveSpeed(4);
	through = false;
	Game_System::BgmPlay(walking_bgm);

	return true;
}
示例#4
0
Game_Player::Game_Player():
	location(Main_Data::game_data.party_location),
	teleporting(false),
	new_map_id(0),
	new_x(0),
	new_y(0),
	last_pan_x(0),
	last_pan_y(0) {
	SetDirection(RPG::EventPage::Direction_down);
	SetMoveSpeed(4);
}
示例#5
0
void Game_Event::Setup(RPG::EventPage* new_page) {
	page = new_page;

	// Free resources if needed
	if (interpreter) {
		interpreter->Clear();
		Game_Map::ReserveInterpreterDeletion(interpreter);
		interpreter.reset();
	}

	if (page == NULL) {
		tile_id = 0;
		SetSpriteName("");
		SetSpriteIndex(0);
		SetDirection(RPG::EventPage::Direction_down);
		//move_type = 0;
		trigger = -1;
		list.clear();
		return;
	}
	SetSpriteName(page->character_name);
	SetSpriteIndex(page->character_index);

	tile_id = page->character_name.empty() ? page->character_index : 0;

	if (GetDirection() != page->character_direction) {
		SetDirection(page->character_direction);
		SetSpriteDirection(page->character_direction);
	}

	if (original_pattern != page->character_pattern) {
		pattern = page->character_pattern;
		original_pattern = pattern;
	}
	
	move_type = page->move_type;
	SetMoveSpeed(page->move_speed);
	SetMoveFrequency(page->move_frequency);
	max_stop_count = (GetMoveFrequency() > 7) ? 0 : pow(2.0, 8 - GetMoveFrequency());
	original_move_frequency = page->move_frequency;
	original_move_route = page->move_route;
	SetOriginalMoveRouteIndex(0);
	animation_type = page->animation_type;
	SetOpacity(page->translucent ? 160 : 255);

	SetLayer(page->layer);
	trigger = page->trigger;
	list = page->event_commands;

	if (trigger == RPG::EventPage::Trigger_parallel) {
		interpreter.reset(new Game_Interpreter_Map());
	}
	CheckEventTriggerAuto();
}
示例#6
0
void Game_Vehicle::Refresh() {
	if (IsInUse()) {
		SetMapId(Game_Map::GetMapId());
	} else if (IsInCurrentMap()) {
		SetProcessed(true); // RPG_RT compatibility
		MoveTo(GetX(), GetY());
	}

	switch (type) {
		case None:
			break;
		case Boat:
		case Ship:
			SetMoveSpeed(RPG::EventPage::MoveSpeed_normal);
			break;
		case Airship:
			SetMoveSpeed(RPG::EventPage::MoveSpeed_double);
			break;
	}
}
示例#7
0
void Game_Event::Setup(RPG::EventPage* new_page) {
	page = new_page;

	if (page == NULL) {
		tile_id = 0;
		SetSpriteName("");
		SetSpriteIndex(0);
		SetDirection(RPG::EventPage::Direction_down);
		//move_type = 0;
		through = true;
		trigger = -1;
		list.clear();
		interpreter.reset();
		return;
	}
	SetSpriteName(page->character_name);
	SetSpriteIndex(page->character_index);

	tile_id = page->character_name.empty() ? page->character_index : 0;

	if (GetDirection() != page->character_direction) {
		SetDirection(page->character_direction);
		SetPrelockDirection(page->character_direction);
	}

	if (original_pattern != page->character_pattern) {
		pattern = page->character_pattern;
		original_pattern = pattern;
	}
	//opacity = page.opacity;
	//opacity = page.translucent ? 192 : 255;
	//blend_type = page.blend_type;
	move_type = page->move_type;
	SetMoveSpeed(page->move_speed);
	SetMoveFrequency(page->move_frequency);
	original_move_route = page->move_route;
	SetOriginalMoveRouteIndex(0);
	animation_type = page->animation_type;

	SetLayer(page->layer);
	trigger = page->trigger;
	list = page->event_commands;
	through = false;

	// Free resources if needed
	interpreter.reset();
	if (trigger == RPG::EventPage::Trigger_parallel) {
		interpreter.reset(new Game_Interpreter_Map());
	}
	CheckEventTriggerAuto();
}
示例#8
0
//no utilizada
CZombie& CZombie::operator = (CZombie& z)
{
  SetHealth(z.GetHealth());
  SetInstance(z.GetInstance());
  SetModelFilename(z.GetModelFilename());
  SetMoveSpeed(z.GetMoveSpeed());
  SetRotSpeed(z.GetRotSpeed());
  GetInstance()->SetScalar(z.GetInstance()->GetScalarX(),z.GetInstance()->GetScalarX(),z.GetInstance()->GetScalarX());
  SetRadiusSmelling(z.GetRadiusSmelling());
  SetRadiuwViewing(z.GetRadiusViewing());
  GetInstance()->SetName(z.GetInstance()->GetName());
  SetEjeMovimientoIA(z.GetEjeMovimientoIA());

  return *this;
}
示例#9
0
void Game_Vehicle::Refresh() {
	if (!driving && Main_Data::game_player->GetVehicle() == this)
		driving = true;

	if (driving)
		SetMapId(Game_Map::GetMapId());
	else if (IsInCurrentMap())
		MoveTo(GetX(), GetY());

	switch (type) {
		case None:
			break;
		case Boat:
		case Ship:
			SetLayer(RPG::EventPage::Layers_same);
			SetMoveSpeed(RPG::EventPage::MoveSpeed_normal);
			break;
		case Airship:
			SetLayer(driving ? RPG::EventPage::Layers_above : RPG::EventPage::Layers_below);
			SetMoveSpeed(RPG::EventPage::MoveSpeed_double);
			break;
	}
	walk_animation = (type != Airship) || driving;
}
示例#10
0
void CPartyIconMoveInfo::SetMoveInfo(PARTYICON_MOVEINFO* pMoveInfo)
{
	m_cPos = pMoveInfo->cPos;
	m_tgMaxIndex = pMoveInfo->tgCount;
	memset(m_tPos, 0, sizeof(MoveCoord)*MAX_CHARTARGETPOSBUF_SIZE);
	for(int i=0; i<m_tgMaxIndex; i++)
	{
		m_tPos[i].posX = pMoveInfo->tgPos[i].posX;
		m_tPos[i].posZ = pMoveInfo->tgPos[i].posZ;
	}	
	m_KyungGongIdx = pMoveInfo->KyungGongIdx;
	m_Speed = pMoveInfo->fSpeed;
	m_tgIndex = 0;
	
	SetMoveSpeed();
}
示例#11
0
void CCameraFlight::InitFlight(const Vec3 &vRefPos, IEntity *pRefEntity)
{
	//data is relative to this spot
	m_vRefPos = vRefPos;
	m_vRefPos2 = Vec3Constants<float>::fVec3_Zero;
	m_pRefEnt = pRefEntity;
	//progress and fading
	m_fFlightProgress = 0.0f;
	m_fCourseLengthOverwrite = 0.0f;
	m_vTargetFadePos = m_vRefPos;
	m_fFadeProgress = 0.0f;
	m_bUseRefDir = false;
	m_eState = eCFS_NONE;

	//update course speed
	SetMoveSpeed(m_fMoveSpeedMps);
}
示例#12
0
Character::Character(Settings *settings, int mapWidth, int mapHeight, std::vector<std::vector<Cell>> *cellMap)
{
    hasText_ = false;
    movespeed_ = 0;
    currentRotation_ = 0;
    hasImage_ = false;
    hasColor_ = false;
    hasImageReference_ = false;
    aiEnabled_ = true;

    mapWidth_ = mapWidth;
    mapHeight_ = mapHeight;

    cellMap_ = cellMap;


    settings_ = settings;
    KeyLeft_ = false;
    KeyRight_ = false;
    KeySpace_ = false;
    SetCurrentPosition(mapWidth_ / Constants::TileSize() + 1, mapHeight_ / Constants::TileSize() + 1);
    SetColor(al_map_rgb_f(1, 1, 1));
    SetWidth(0.8);
    SetHeight(0.8);

    SetGravityY(-9.8);
    SetVelocityY(0.125);
    SetMaxVelocityY(1);
    SetAccelerationY(0.03125);


    SetMoveSpeedDelta(0.0625);
    SetMoveSpeed(30);
    SetJumpSpeed(12);

    font30_ = al_load_font("arial.ttf", Constants::TileSize(), 0);



    SetCharacterYAxisState(CHARACTERYAXISSTATES::CHARACTERFALLING);



}
示例#13
0
bool CClientVehicle::Deserialize(CBitStream * pBitStream)
{
	// Read the vehicle position
	CVector3 vecPosition;

	if(!pBitStream->Read(vecPosition))
		return false;

	SetPosition(vecPosition);

	// Read the vehicle rotation
	CVector3 vecRotation;

	if(!pBitStream->Read(vecRotation))
		return false;

	SetRotation(vecRotation);

	// Read the vehicle move speed
	CVector3 vecMoveSpeed;

	if(!pBitStream->Read(vecMoveSpeed))
		return false;

	SetMoveSpeed(vecMoveSpeed);

	// Read the vehicle turn speed
	CVector3 vecTurnSpeed;

	if(!pBitStream->Read(vecTurnSpeed))
		return false;

	SetTurnSpeed(vecTurnSpeed);

	// Read the vehicle health
	float fHealth;

	if(!pBitStream->Read(fHealth))
		return false;

	SetHealth(fHealth);
	return true;
}
示例#14
0
void CCameraFlight::Reset()
{
	m_cameraCourse.clear();
	SetMoveSpeed();
	m_fFlightProgress = 0.0f;
	m_eMovementMode = eCFM_NONE;
	m_pRefEnt = NULL;
	m_eFadeMode = eCFFM_NONE;
	m_vRefPos = Vec3Constants<float>::fVec3_Zero;
	m_vRefPos2 = Vec3Constants<float>::fVec3_Zero;
	m_vRefDir = Vec3Constants<float>::fVec3_OneY;
	m_vLookingDirection = Vec3Constants<float>::fVec3_OneY;
	m_vTargetFadePos = Vec3Constants<float>::fVec3_Zero;
	m_bPaused = false;
	m_bUseRefDir = false;
	m_fCourseLengthOverwrite = 0.0f;
	m_fFadeTime = 0.0f;
	m_qFadeOrientation.SetIdentity();
	m_fFadeProgress = 0.0f;
	m_eState = eCFS_NONE;
}
bool CZombieOlfateador::Init(CZombie &z)
{
	bool bIsOk = Inherited::Init(z);
  if (!bIsOk)
  {
		printf("a CZombieOlfateador instace couldnt allocate memory");
    Done();								//We call Done()  to release before the parent class
	}
  else
  {
    SetHealth(z.GetHealth());
    SetInstance(z.GetInstance());
    SetModelFilename(z.GetModelFilename());
    SetMoveSpeed(z.GetMoveSpeed());
    SetRotSpeed(z.GetRotSpeed());
    GetInstance()->SetScalar(z.GetInstance()->GetScalarX(),z.GetInstance()->GetScalarY(),z.GetInstance()->GetScalarZ());
    SetSiguiendoRuta(false);
  }

  return bIsOk;
}
示例#16
0
bool Enemy::InitData(const string& name)
{
	EnemyInfo* info = PlaneManager::getInstance()->GetEnemyInfo(name);
	SetName(name);
	ChangeBulletType(info->bulletType);
	SetHpMax(info->hpMax);
	SetHp(GetHpMax());
	_duration = info->duration;
	_stayTime = info->stayTime;
	SetMoveSpeed(info->moveSpeed);
	_score = info->score;
	_itemID = info->itemID;
	switch (info->layer)
	{
	case 1:
		SetOrder(LAYER_ENEMY_1);
		break;
	case 2:
		SetOrder(LAYER_ENEMY_2);
		break;
	case 3:
		SetOrder(LAYER_ENEMY_3);
		break;
	default:
		SetOrder(LAYER_ENEMY_1);
		break;
	}
	ChangeMoveState(info->moveStateID);
	SetMoveEnable(true);


	if (InitWithFile(info->imgPath))
	{
		return true;
	}

	return false;
}
示例#17
0
void Game_Player::UpdateNonMoving(bool last_moving) {
	if (IsMoving() || IsMoveRouteOverwritten()) return;

	if (last_moving && location.boarding) {
		// Boarding completed
		location.aboard = true;
		location.boarding = false;
		SetMoveSpeed(GetVehicle()->GetMoveSpeed());
		SetDirection(GetVehicle()->GetDirection());
		return;
	}

	if (last_moving && location.unboarding) {
		// Unboarding completed
		location.unboarding = false;
		location.vehicle = Game_Vehicle::None;
		CheckTouchEvent();
		return;
	}

	if (InAirship() && !GetVehicle()->IsInUse()) {
		// Airship has landed
		Unboard();
		location.vehicle = Game_Vehicle::None;
		SetDirection(RPG::EventPage::Direction_down);

	}

	if (last_moving && CheckTouchEvent()) return;

	if (!Game_Message::visible && Input::IsTriggered(Input::DECISION)) {
		if ( GetOnOffVehicle() ) return;
		if ( CheckActionEvent() ) return;
	}

	if (last_moving)
		Game_Map::UpdateEncounterSteps();
}
示例#18
0
void CClientVehicle::StreamIn()
{
	// Attempt to create the vehicle
	if(Create())
	{
		// Set the position
		Teleport(m_vecPosition);

		// Set the rotation
		SetRotation(m_vecRotation);

		// Set the move speed
		SetMoveSpeed(m_vecMoveSpeed);

		// Set the turn speed
		SetTurnSpeed(m_vecTurnSpeed);

		// Set the colors
		SetColors(m_byteColors[0], m_byteColors[1], m_byteColors[2], m_byteColors[3]);

		// Set the health
		SetHealth(m_fHealth);
	}
}
示例#19
0
void CVehicleEntity::StopMoving()
{
	SetMoveSpeed(CVector3());
}
示例#20
0
void Game_Player::Update() {
	int cur_frame_count = Player::GetFrames();
	// Only update the event once per frame
	if (cur_frame_count == frame_count_at_last_update_parallel) {
		return;
	}
	frame_count_at_last_update_parallel = cur_frame_count;

	bool last_moving = IsMoving() || IsJumping();

	// Workaround: If a blocking move route ends in this frame, Game_Player::CancelMoveRoute decides
	// which events to start. was_blocked is used to avoid triggering events the usual way.
	bool was_blocked = IsBlockedByMoveRoute();
	Game_Character::Update();

	if (!Game_Map::GetInterpreter().IsRunning() && !Game_Map::IsAnyEventStarting()) {
		if (IsMovable()) {
			switch (Input::dir4) {
				case 2:
					Move(Down);
					break;
				case 4:
					Move(Left);
					break;
				case 6:
					Move(Right);
					break;
				case 8:
					Move(Up);
			}
		}

		// ESC-Menu calling
		if (Game_System::GetAllowMenu() && !Game_Message::message_waiting && Input::IsTriggered(Input::CANCEL)) {
			Game_Temp::menu_calling = true;
		}
	}

	Game_Character::UpdateSprite();
	UpdateScroll();

	if (location.aboard)
		GetVehicle()->SyncWithPlayer();

	if (IsMoving() || was_blocked) return;

	if (last_moving && location.boarding) {
		// Boarding completed
		location.aboard = true;
		location.boarding = false;
		SetMoveSpeed(GetVehicle()->GetMoveSpeed());
		SetDirection(GetVehicle()->GetDirection());
		return;
	}

	if (last_moving && location.unboarding) {
		// Unboarding completed
		location.unboarding = false;
		location.vehicle = Game_Vehicle::None;
		CheckTouchEvent();
		return;
	}

	if (InAirship() && !GetVehicle()->IsInUse()) {
		// Airship has landed
		Unboard();
		location.vehicle = Game_Vehicle::None;
		SetDirection(RPG::EventPage::Direction_down);

	}

	if (last_moving && CheckTouchEvent()) return;

	if (!Game_Map::GetInterpreter().IsRunning() && !Game_Map::IsAnyEventStarting()) {
		if (!Game_Message::visible && Input::IsTriggered(Input::DECISION)) {
			if ( GetOnOffVehicle() ) return;
			if ( CheckActionEvent() ) return;
		}
	}

	if (last_moving)
		Game_Map::UpdateEncounterSteps();
}
示例#21
0
void Game_Character::MoveTypeCustom() {
	// Detect if custom movement or event overwrite
	const RPG::MoveRoute* active_route;
	int active_route_index;
	bool overwrite_changed = IsMoveRouteOverwritten();
	if (IsMoveRouteOverwritten()) {
		active_route = &GetMoveRoute();
		active_route_index = GetMoveRouteIndex();
	}
	else {
		active_route = &original_move_route;
		active_route_index = GetOriginalMoveRouteIndex();
	}

	if (IsStopping()) {
		move_failed = false;
		if ((size_t)active_route_index >= active_route->move_commands.size()) {
			// End of Move list
			if (active_route->repeat) {
				active_route_index = 0;
				SetMoveRouteRepeated(true);
			} else if (IsMoveRouteOverwritten()) {
				SetMoveRouteOverwritten(false);
				EndMoveRoute();
				stop_count = 0;
			}
		} else {
			do {
				const RPG::MoveCommand& move_command = active_route->move_commands[active_route_index];

				int command_id = move_command.command_id;
				if (!jumping && command_id == RPG::MoveCommand::Code::begin_jump) {
					active_route_index = BeginJump(active_route, active_route_index);
				}

				switch (move_command.command_id) {
				case RPG::MoveCommand::Code::move_up:
					MoveUp();
					break;
				case RPG::MoveCommand::Code::move_right:
					MoveRight();
					break;
				case RPG::MoveCommand::Code::move_down:
					MoveDown();
					break;
				case RPG::MoveCommand::Code::move_left:
					MoveLeft();
					break;
				case RPG::MoveCommand::Code::move_upright:
					MoveUpRight();
					break;
				case RPG::MoveCommand::Code::move_downright:
					MoveDownRight();
					break;
				case RPG::MoveCommand::Code::move_downleft:
					MoveDownLeft();
					break;
				case RPG::MoveCommand::Code::move_upleft:
					MoveUpLeft();
					break;
				case RPG::MoveCommand::Code::move_random:
					MoveRandom();
					break;
				case RPG::MoveCommand::Code::move_towards_hero:
					MoveTowardsPlayer();
					break;
				case RPG::MoveCommand::Code::move_away_from_hero:
					MoveAwayFromPlayer();
					break;
				case RPG::MoveCommand::Code::move_forward:
					MoveForward();
					break;
				case RPG::MoveCommand::Code::face_up:
					TurnUp();
					break;
				case RPG::MoveCommand::Code::face_right:
					TurnRight();
					break;
				case RPG::MoveCommand::Code::face_down:
					TurnDown();
					break;
				case RPG::MoveCommand::Code::face_left:
					TurnLeft();
					break;
				case RPG::MoveCommand::Code::turn_90_degree_right:
					Turn90DegreeRight();
					break;
				case RPG::MoveCommand::Code::turn_90_degree_left:
					Turn90DegreeLeft();
					break;
				case RPG::MoveCommand::Code::turn_180_degree:
					Turn180Degree();
					break;
				case RPG::MoveCommand::Code::turn_90_degree_random:
					Turn90DegreeLeftOrRight();
					break;
				case RPG::MoveCommand::Code::face_random_direction:
					FaceRandomDirection();
					break;
				case RPG::MoveCommand::Code::face_hero:
					TurnTowardHero();
					break;
				case RPG::MoveCommand::Code::face_away_from_hero:
					TurnAwayFromHero();
					break;
				case RPG::MoveCommand::Code::wait:
					Wait();
					break;
				case RPG::MoveCommand::Code::begin_jump:
					// Multiple BeginJumps are ignored
					break;
				case RPG::MoveCommand::Code::end_jump:
					active_route_index = EndJump(active_route, active_route_index);
					break;
				case RPG::MoveCommand::Code::lock_facing:
					SetFacingLocked(true);
					break;
				case RPG::MoveCommand::Code::unlock_facing:
					SetFacingLocked(false);
					break;
				case RPG::MoveCommand::Code::increase_movement_speed:
					SetMoveSpeed(min(GetMoveSpeed() + 1, 6));
					break;
				case RPG::MoveCommand::Code::decrease_movement_speed:
					SetMoveSpeed(max(GetMoveSpeed() - 1, 1));
					break;
				case RPG::MoveCommand::Code::increase_movement_frequence:
					SetMoveFrequency(min(GetMoveFrequency() + 1, 8));
					break;
				case RPG::MoveCommand::Code::decrease_movement_frequence:
					SetMoveFrequency(max(GetMoveFrequency() - 1, 1));
					break;
				case RPG::MoveCommand::Code::switch_on: // Parameter A: Switch to turn on
					Game_Switches[move_command.parameter_a] = true;
					Game_Map::SetNeedRefresh(true);
					break;
				case RPG::MoveCommand::Code::switch_off: // Parameter A: Switch to turn off
					Game_Switches[move_command.parameter_a] = false;
					Game_Map::SetNeedRefresh(true);
					break;
				case RPG::MoveCommand::Code::change_graphic: // String: File, Parameter A: index
					SetGraphic(move_command.parameter_string, move_command.parameter_a);
					break;
				case RPG::MoveCommand::Code::play_sound_effect: // String: File, Parameters: Volume, Tempo, Balance
					if (move_command.parameter_string != "(OFF)") {
						Audio().SE_Play(move_command.parameter_string,
							move_command.parameter_a, move_command.parameter_b);
					}
					break;
				case RPG::MoveCommand::Code::walk_everywhere_on:
					through = true;
					break;
				case RPG::MoveCommand::Code::walk_everywhere_off:
					through = false;
					break;
				case RPG::MoveCommand::Code::stop_animation:
					walk_animation = false;
					break;
				case RPG::MoveCommand::Code::start_animation:
					walk_animation = true;
					break;
				case RPG::MoveCommand::Code::increase_transp:
					SetOpacity(max(40, GetOpacity() - 45));
					break;
				case RPG::MoveCommand::Code::decrease_transp:
					SetOpacity(GetOpacity() + 45);
					break;
				}

				if (active_route->skippable || !move_failed) {
					++active_route_index;
				}
			} while (jumping);

			if ((size_t)active_route_index >= active_route->move_commands.size()) {
				stop_count = (active_route->repeat ? 0 : 256);
			}
		}
	}

	// When the overwrite status changed the active_index belongs to the
	// current non-active move route
	if (overwrite_changed != IsMoveRouteOverwritten()) {
		if (IsMoveRouteOverwritten()) {
			SetOriginalMoveRouteIndex(active_route_index);
		}
		else {
			SetMoveRouteIndex(active_route_index);
		}
	}
	else {
		if (IsMoveRouteOverwritten()) {
			SetMoveRouteIndex(active_route_index);
		}
		else {
			SetOriginalMoveRouteIndex(active_route_index);
		}
	}
}
示例#22
0
void Game_Player::Unboard() {
	location.aboard = false;
	SetMoveSpeed(location.preboard_move_speed);

	Game_System::BgmPlay(walking_bgm);
}
示例#23
0
void CPartyIconMoveInfo::SetKoungGongIdx(int Index)
{
	m_KyungGongIdx = Index;
	SetMoveSpeed();		
}
示例#24
0
void Game_Character::MoveTypeCustom() {
	// Detect if custom movement or event overwrite
	const RPG::MoveRoute* active_route;
	int active_route_index;
	bool overwrite_changed = IsMoveRouteOverwritten();
	if (IsMoveRouteOverwritten()) {
		active_route = &GetMoveRoute();
		active_route_index = GetMoveRouteIndex();
	}
	else {
		active_route = &original_move_route;
		active_route_index = GetOriginalMoveRouteIndex();
	}

	if (IsStopping()) {
		move_failed = false;

		for (; (size_t)active_route_index < active_route->move_commands.size(); ++active_route_index) {
			if (!IsStopping() || wait_count > 0 || stop_count < max_stop_count)
				break;

			const RPG::MoveCommand& move_command = active_route->move_commands[active_route_index];

			switch (move_command.command_id) {
			case RPG::MoveCommand::Code::move_up:
			case RPG::MoveCommand::Code::move_right:
			case RPG::MoveCommand::Code::move_down:
			case RPG::MoveCommand::Code::move_left:
			case RPG::MoveCommand::Code::move_upright:
			case RPG::MoveCommand::Code::move_downright:
			case RPG::MoveCommand::Code::move_downleft:
			case RPG::MoveCommand::Code::move_upleft:
				Move(move_command.command_id);
				break;
			case RPG::MoveCommand::Code::move_random:
				MoveRandom();
				break;
			case RPG::MoveCommand::Code::move_towards_hero:
				MoveTowardsPlayer();
				break;
			case RPG::MoveCommand::Code::move_away_from_hero:
				MoveAwayFromPlayer();
				break;
			case RPG::MoveCommand::Code::move_forward:
				MoveForward();
				break;
			case RPG::MoveCommand::Code::face_up:
				Turn(Up);
				break;
			case RPG::MoveCommand::Code::face_right:
				Turn(Right);
				break;
			case RPG::MoveCommand::Code::face_down:
				Turn(Down);
				break;
			case RPG::MoveCommand::Code::face_left:
				Turn(Left);
				break;
			case RPG::MoveCommand::Code::turn_90_degree_right:
				Turn90DegreeRight();
				break;
			case RPG::MoveCommand::Code::turn_90_degree_left:
				Turn90DegreeLeft();
				break;
			case RPG::MoveCommand::Code::turn_180_degree:
				Turn180Degree();
				break;
			case RPG::MoveCommand::Code::turn_90_degree_random:
				Turn90DegreeLeftOrRight();
				break;
			case RPG::MoveCommand::Code::face_random_direction:
				FaceRandomDirection();
				break;
			case RPG::MoveCommand::Code::face_hero:
				TurnTowardHero();
				break;
			case RPG::MoveCommand::Code::face_away_from_hero:
				TurnAwayFromHero();
				break;
			case RPG::MoveCommand::Code::wait:
				Wait();
				break;
			case RPG::MoveCommand::Code::begin_jump:
				BeginJump(active_route, &active_route_index);
				break;
			case RPG::MoveCommand::Code::end_jump:
				// EndJump();
				break;
			case RPG::MoveCommand::Code::lock_facing:
				SetFacingLocked(true);
				break;
			case RPG::MoveCommand::Code::unlock_facing:
				SetFacingLocked(false);
				break;
			case RPG::MoveCommand::Code::increase_movement_speed:
				SetMoveSpeed(min(GetMoveSpeed() + 1, 6));
				break;
			case RPG::MoveCommand::Code::decrease_movement_speed:
				SetMoveSpeed(max(GetMoveSpeed() - 1, 1));
				break;
			case RPG::MoveCommand::Code::increase_movement_frequence:
				SetMoveFrequency(min(GetMoveFrequency() + 1, 8));
				break;
			case RPG::MoveCommand::Code::decrease_movement_frequence:
				SetMoveFrequency(max(GetMoveFrequency() - 1, 1));
				break;
			case RPG::MoveCommand::Code::switch_on: // Parameter A: Switch to turn on
				Game_Switches[move_command.parameter_a] = true;
				Game_Map::SetNeedRefresh(Game_Map::Refresh_All);
				break;
			case RPG::MoveCommand::Code::switch_off: // Parameter A: Switch to turn off
				Game_Switches[move_command.parameter_a] = false;
				Game_Map::SetNeedRefresh(Game_Map::Refresh_All);
				break;
			case RPG::MoveCommand::Code::change_graphic: // String: File, Parameter A: index
				SetGraphic(move_command.parameter_string, move_command.parameter_a);
				break;
			case RPG::MoveCommand::Code::play_sound_effect: // String: File, Parameters: Volume, Tempo, Balance
				if (move_command.parameter_string != "(OFF)" && move_command.parameter_string != "(Brak)") {
					RPG::Sound sound;
					sound.name = move_command.parameter_string;
					sound.volume = move_command.parameter_a;
					sound.tempo = move_command.parameter_b;
					sound.balance = move_command.parameter_c;

					Game_System::SePlay(sound);
				}
				break;
			case RPG::MoveCommand::Code::walk_everywhere_on:
				through = true;
				break;
			case RPG::MoveCommand::Code::walk_everywhere_off:
				through = false;
					break;
			case RPG::MoveCommand::Code::stop_animation:
				walk_animation = false;
				break;
			case RPG::MoveCommand::Code::start_animation:
				walk_animation = true;
				break;
			case RPG::MoveCommand::Code::increase_transp:
				SetOpacity(max(40, GetOpacity() - 45));
				break;
			case RPG::MoveCommand::Code::decrease_transp:
				SetOpacity(GetOpacity() + 45);
				break;
			}

			last_move_failed = move_failed;
			if (move_failed) {
				if (active_route->skippable) {
					last_move_failed = false;
					continue;
				}

				break;
			}
		}

		if ((size_t)active_route_index >= active_route->move_commands.size() && IsStopping()) {
			// End of Move list
			if (active_route->repeat) {
				active_route_index = 0;
				SetMoveRouteRepeated(true);
			} else if (IsMoveRouteOverwritten()) {
				CancelMoveRoute();
				Game_Map::RemovePendingMove(this);
				stop_count = 0;
			}
		}
	}

	// When the overwrite status changed the active_index belongs to the
	// current non-active move route
	if (overwrite_changed != IsMoveRouteOverwritten()) {
		if (IsMoveRouteOverwritten()) {
			SetOriginalMoveRouteIndex(active_route_index);
		}
		else {
			SetMoveRouteIndex(active_route_index);
		}
	}
	else {
		if (IsMoveRouteOverwritten()) {
			SetMoveRouteIndex(active_route_index);
		}
		else {
			SetOriginalMoveRouteIndex(active_route_index);
		}
	}
}
示例#25
0
void CPartyIconMoveInfo::SetMoveState(int State)
{
	SetMoveSpeed();
}
示例#26
0
void CMinotaur::CollisionResponse(IObject* _cCollidedObject)
{
	//DBG_UNREFERENCED_PARAMETER(_cCollidedObject);
	/*if (_cCollidedObject->GetTag() == "Floor" || _cCollidedObject->GetTag() == "SafeHavenFloor")
	{
	if (m_mWorld.m[3][1] > -20.0f && m_f3Velocity.y < 0.0f)
	{
	CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[0]);

	}
	}*/

	if (_cCollidedObject->GetTag() == "Wall" || _cCollidedObject->GetTag() == "Door" || _cCollidedObject->GetTag() == "CrackedWall" || _cCollidedObject->GetTag() == "Enemy Cave Wall")
	{

		for (size_t i = 1; i < _cCollidedObject->GetColliders().size(); i++)
		{
			if (_cCollidedObject->GetColliders()[i]->GetCollided())
			{
				if (_cCollidedObject->GetColliders()[i]->GetType() == Bounds::AABB)
				{
					CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
					_cCollidedObject->GetColliders()[i]->SetCollided(false);
				}
				else if (_cCollidedObject->GetColliders()[i]->GetType() == Bounds::Plane)
				{
					if (m_mWorld.m[3][1] > -20.0f && m_f3Velocity.y < 0.0f)
					{
						CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
						_cCollidedObject->GetColliders()[i]->SetCollided(false);
						m_bIsGrounded = true;
					}
				}
			}
		}
	}
	else if (_cCollidedObject->GetTag() == "MinotaurSpawn")
	{
	
		for (size_t i = 1; i < _cCollidedObject->GetColliders().size(); i++)
		{
			if (_cCollidedObject->GetColliders()[i]->GetCollided())
			{
				if (_cCollidedObject->GetColliders()[i]->GetType() == Bounds::AABB)
				{
					CAABB* bounds = (CAABB*)(_cCollidedObject->GetColliders()[i]->GetBounds());

					CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);

					_cCollidedObject->GetColliders()[i]->SetCollided(false);
				}
				else if (_cCollidedObject->GetColliders()[i]->GetType() == Bounds::Plane)
				{
					if (m_mWorld.m[3][1] > -20.0f && m_f3Velocity.y < 0.0f)
					{
						CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
						_cCollidedObject->GetColliders()[i]->SetCollided(false);
						m_bIsGrounded = true;
					}
				}
			}
		}
	}
	else if (_cCollidedObject->GetTag() == "SmallPit")
	{
		if (m_mWorld.m[3][1] > -20.0f && m_f3Velocity.y < 0.0f)
		{
			CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[_cCollidedObject->GetColliders().size() - 1]);
			_cCollidedObject->GetColliders()[_cCollidedObject->GetColliders().size() - 1]->SetCollided(false);

			m_bIsGrounded = true;

		}
		else if (m_f3Velocity.y < 0.0f)
		{
			m_bIsGrounded = true;

			for (size_t i = 1; i < _cCollidedObject->GetColliders().size() - 1; i++)
			{
				if (_cCollidedObject->GetColliders()[i]->GetCollided())
				{
					CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
					_cCollidedObject->GetColliders()[i]->SetCollided(false);
				}
			}
		}
		//CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[GetColliders().size() - 1]);
	}
	else if (_cCollidedObject->GetTag() == "BigPit")
	{
		if (m_mWorld.m[3][1] > -20.0f && m_f3Velocity.y < 0.0f)
		{
			CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[_cCollidedObject->GetColliders().size() - 1]);
			_cCollidedObject->GetColliders()[_cCollidedObject->GetColliders().size() - 1]->SetCollided(false);

			m_bIsGrounded = true;

		}
		else if (m_f3Velocity.y < 0.0f)
		{

			for (size_t i = 1; i < _cCollidedObject->GetColliders().size() - 1; i++)
			{
				if (_cCollidedObject->GetColliders()[i]->GetCollided())
				{
					CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
					_cCollidedObject->GetColliders()[i]->SetCollided(false);
				}
			}
		}
	}
	else if (_cCollidedObject->GetTag() == "CaveSpawn")
	{
		CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[0]);
		_cCollidedObject->GetColliders()[0]->SetCollided(false);

	}
	else if (_cCollidedObject->GetTag() == "Player")
	{
		CPlayer* player = reinterpret_cast<CPlayer*>(GetPlayer());
		player->TakeDamage(200);
		if (player->GetHealth() > 0)
		{
			XMFLOAT3 pos = *GetPosition();
			XMFLOAT3 playerPos = *player->GetPosition();
			AudioSystemWwise::Get()->PostEvent(AK::EVENTS::MINOGRUNT, pos);
			AudioSystemWwise::Get()->PostEvent(AK::EVENTS::PLAYERTRAMPLE, playerPos);
		}
		//_cCollidedObject->GetColliders()[1]->SetCollided(false);

	}
	else if (_cCollidedObject->GetTag() == "SafeHavenFloor")
	{
		ChangeState(eDeadState);
	}
	else if (_cCollidedObject->GetTag() == "Floor")
	{
		if (m_mWorld.m[3][1] > -20.0f && m_f3Velocity.y < 0.0f)
		{
			CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[0]);
			m_bIsGrounded = true;
		}
	}

	else if (_cCollidedObject->GetTag() == "SpikeTrap" || _cCollidedObject->GetTag() == "SpinningBlade")
	{
		if (m_fSlowTimer >= 0.0f)
		{
			m_fSlowTimer = SLOW_TIME;
			SetMoveSpeed(GetMoveSpeed() * 0.5f);
			m_fCurrentHealth -= 10.0f;
		}
	}
	else if (_cCollidedObject->GetTag() == "TrapPrefab")
	{

		CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[0]);
		m_bIsGrounded = true;

		/*for (size_t i = 1; i < _cCollidedObject->GetColliders().size(); i++)
		{
		if (_cCollidedObject->GetColliders()[i]->GetCollided())
		{
		if (_cCollidedObject->GetColliders()[i]->GetType() == Bounds::AABB)
		{
		if (m_mWorld.m[3][1] > -20.0f && m_f3Velocity.y < 0.0f)
		CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
		else
		CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);

		m_bIsGrounded = true;

		_cCollidedObject->GetColliders()[i]->SetCollided(false);
		}
		else if (_cCollidedObject->GetColliders()[i]->GetType() == Bounds::Plane)
		{
		if (m_mWorld.m[3][1] > -20.0f && m_f3Velocity.y < 0.0f)
		{
		CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
		_cCollidedObject->GetColliders()[i]->SetCollided(false);
		m_bIsGrounded = true;
		}
		}
		}
		}*/
	}
	else if (_cCollidedObject->GetTag() == "ExitDoor")
	{

		CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[0]);
		_cCollidedObject->GetColliders()[0]->SetCollided(false);

	}
	else if (_cCollidedObject->GetTag() == "Bridge")
	{
		CBridge* curBridge = reinterpret_cast<CBridge*>(_cCollidedObject);


		if (curBridge->IsActive() && curBridge->IsIntact())
		{



			if (curBridge->IsActive() && curBridge->IsIntact())
			{
				if (_cCollidedObject->GetColliders()[1]->GetCollided())
				{
					CAABB* bounds = ((CAABB*)_cCollidedObject->GetColliders()[1]->GetBounds());
					if ((bounds->GetExtents().x == 250.0f &&
						bounds->GetExtents().y == 150.0f &&
						bounds->GetExtents().z == 50.0f) || (bounds->GetExtents().x == 50.0f &&
						bounds->GetExtents().y == 150.0f &&
						bounds->GetExtents().z == 250.0f))
					{
						CBridge* bridge = (CBridge*)_cCollidedObject;
						bridge->Destroy();
						m_bIsGrounded = false;
						ChangeState(EMinotaurStates::eDeadState);

					}
					_cCollidedObject->GetColliders()[1]->SetCollided(false);


				}
				for (size_t i = 2; i < 10; i++)
				{
					if (_cCollidedObject->GetColliders()[i]->GetCollided())
					{
						if (GetPosition()->y < 20.0f)
						{
							CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
							_cCollidedObject->GetColliders()[i]->SetCollided(false);
							m_bIsGrounded = true;
						}
						else
						{
							CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
							_cCollidedObject->GetColliders()[i]->SetCollided(false);
						}
					}
				}
				for (size_t i = 10; i < _cCollidedObject->GetColliders().size(); i++)
				{
					if (_cCollidedObject->GetColliders()[i]->GetCollided())
					{

						CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
						_cCollidedObject->GetColliders()[i]->SetCollided(false);
					}
				}

				//for (size_t i = 1; i < _cCollidedObject->GetColliders().size(); i++)
				//{
				//	if (_cCollidedObject->GetColliders()[i]->GetCollided())
				//	{
				//		//CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
				//		_cCollidedObject->GetColliders()[i]->SetCollided(false);
				//	}
				//}
				//if (_cCollidedObject->GetColliders()[0]->GetCollided())
				//{
				//	//CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[0]);
				//	_cCollidedObject->GetColliders()[0]->SetCollided(false);
				//	m_bIsGrounded = true;
				//}
			}

		}
	}

	else if (_cCollidedObject->GetTag() == "CrackedWall")
	{
		for (size_t i = 0; i < _cCollidedObject->GetColliders().size() - 4; i++)
		{
			if ((_cCollidedObject->GetColliders()[i])->GetCollided())
			{
				if (_cCollidedObject->GetColliders()[i]->GetType() == Bounds::AABB)
				{
					CapsuleToWall(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
					_cCollidedObject->GetColliders()[i]->SetCollided(false);
				}
				else if (_cCollidedObject->GetColliders()[i]->GetType() == Bounds::Plane)
				{
					CapsuleToFloor(this, m_pvColliders[1], _cCollidedObject->GetColliders()[i]);
					_cCollidedObject->GetColliders()[i]->SetCollided(false);
					m_bIsGrounded = true;
				}
			}
		}
	}
	else if (_cCollidedObject->GetTag() == "Minotaur")
	{
		CapsuleToCapsule(this, m_pvColliders[1], _cCollidedObject->GetColliders()[1]);
	}
	else if (_cCollidedObject->GetTag() == "Skeleton")
	{
		reinterpret_cast<CSkeleton*>(_cCollidedObject)->TakeDamage(200);
	}
	else if (_cCollidedObject->GetTag() == "PitWall")
	{
		//		m_f3Velocity.y = 1000.0f;
	}
}
示例#27
0
Game_Player::Game_Player():
	location(Main_Data::game_data.party_location) {
	SetDirection(RPG::EventPage::Direction_down);
	SetMoveSpeed(4);
}