1
0
forked from metin2/client

convert comments in cpp files to utf8

This commit is contained in:
2024-12-17 22:41:21 +01:00
parent 4525e3103d
commit 361a62853d
153 changed files with 955 additions and 955 deletions

View File

@ -112,7 +112,7 @@ void CActorInstance::OnUpdate()
}
// 2004.07.05.myevan. <EFBFBD>ý<EFBFBD>ź<EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD>̴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ذ<EFBFBD>
// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결
IBackground& CActorInstance::GetBackground()
{
return IBackground::Instance();
@ -202,7 +202,7 @@ void CActorInstance::SetFishingPosition(D3DXVECTOR3 & rv3Position)
m_v3FishingPosition = rv3Position;
}
// ActorInstanceMotion.cpp <EFBFBD><EFBFBD> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20><><EFBFBD><EFBFBD>
// ActorInstanceMotion.cpp 에 넣도록 하자
void CActorInstance::Move()
{
if (m_isWalking)
@ -459,8 +459,8 @@ void CActorInstance::PhysicsProcess()
void CActorInstance::__AccumulationMovement(float fRot)
{
// NOTE - <EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD> WAIT<49><54> <20>̲<EFBFBD><CCB2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD> RaceMotionData<EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Flag<61><67> <20><><EFBFBD><EFBFBD> <20>ְԲ<D6B0> <20>Ѵ<EFBFBD>. - [levites]
// NOTE - 일단은 WAIT로 미끄러짐 방지
// 추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites]
if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex())
return;
@ -606,9 +606,9 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
return;
}
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Sphere Overlap<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20>ϸ<EFBFBD><CFB8><EFBFBD> Penetration<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> <20><><EFBFBD>԰<EFBFBD> --)
// Sphere<EFBFBD><EFBFBD> Collision<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> RollBack<63>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD>.
// <EFBFBD><EFBFBD> BGObject<EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>.
// NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --)
// Sphere Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다.
// BGObject에 대해서만.
if (isAttacking() )
return;
@ -618,7 +618,7 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
{
BlockMovement();
//Movement<EFBFBD>ʱ<EFBFBD>ȭ
//Movement초기화
/* m_v3Movement = D3DXVECTOR3(0.f,0.f,0.f);
TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin();
@ -682,7 +682,7 @@ void CActorInstance::__AdjustCollisionMovement(const CGraphicObjectInstance * c_
return;
}
// Body<EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
// Body는 하나임을 가정합니다.
if (m_v3Movement.x == 0.0f && m_v3Movement.y == 0.0f && m_v3Movement.z == 0.0f)
return;

View File

@ -159,7 +159,7 @@ void CActorInstance::AttachWeapon(DWORD dwItemIndex,DWORD dwParentPartIndex, DWO
}
__DestroyWeaponTrace();
//<EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD>(<28>ڰ<EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD>) <20>޼<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD>.
//양손무기(자객 이도류) 왼손,오른손 모두에 장착.
if (__IsRightHandWeapon(pItemData->GetWeaponType()))
AttachWeapon(dwParentPartIndex, CRaceData::PART_WEAPON, pItemData);
if (__IsLeftHandWeapon(pItemData->GetWeaponType()))
@ -182,7 +182,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI
if (!GetAttachingBoneName(dwPartIndex, &szBoneName))
return;
// NOTE : (<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD>)<29>ܵ<EFBFBD><DCB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>°<EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
// NOTE : (이도류처리)단도일 경우 형태가 다른 것으로 얻는다. 없을 경우 디폴트를 리턴
if (CRaceData::PART_WEAPON_LEFT == dwPartIndex)
{
RegisterModelThing(dwPartIndex, pItemData->GetSubModelThing());
@ -205,7 +205,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI
SetModelInstance(dwPartIndex, dwPartIndex, 0);
AttachModelInstance(dwParentPartIndex, szBoneName, dwPartIndex);
// 20041208.myevan.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŧ<EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SetShape<70><65><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ش<EFBFBD>.)
// 20041208.myevan.무기스펙큘러(값옷은 SetShape에서 직접 해준다.)
if (USE_WEAPON_SPECULAR)
{
SMaterialData kMaterialData;
@ -424,8 +424,8 @@ void CActorInstance::RefreshActorInstance()
{
const NRaceData::TCollisionData * c_pCollisionData = c_pAttachingData->pCollisionData;
// FIXME : ù<EFBFBD><EFBFBD>° <20><><EFBFBD>ڴ<EFBFBD> Part<72><74> <20><>ȣ<EFBFBD><C8A3>.
// Base<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<>ΰ<EFBFBD>? - [levites]
// FIXME : 첫번째 인자는 Part의 번호다.
// Base는 무조건 0인가? - [levites]
TCollisionPointInstance PointInstance;
if (NRaceData::COLLISION_TYPE_ATTACKING == c_pCollisionData->iCollisionType)
continue;

View File

@ -170,10 +170,10 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
}
else if (m_pkCurRaceMotionData->IsComboInputTimeData())
{
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
// 동작 경과 시간
float fElapsedTime = GetAttackingElapsedTime();
// <EFBFBD>̹<EFBFBD> <20>Է<EFBFBD> <20>Ѱ<EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>..
// 이미 입력 한계 시간이 지났다면..
if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime())
{
//Tracen("\xC0\xD4\xB7\xC2 \xC7\xD1\xB0\xE8 \xBD\xC3\xB0\xA3 \xC1\xF6\xB3\xB2");
@ -182,14 +182,14 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
return false;
}
if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // <EFBFBD>޺<EFBFBD> <20>ߵ<EFBFBD> <20>ð<EFBFBD> <20><> <20>Ķ<EFBFBD><C4B6><EFBFBD>
if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면
{
//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
// args : BlendingTime
__RunNextCombo();
return true;
}
else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // <EFBFBD><EFBFBD> <20>Է<EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면..
{
//Tracen("\xBC\xB1 \xC0\xD4\xB7\xC2 \xBC\xB3\xC1\xA4");
m_isPreInput = TRUE;
@ -199,7 +199,7 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
else
{
float fElapsedTime = GetAttackingElapsedTime();
if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // <EFBFBD>޺<EFBFBD> <20>ߵ<EFBFBD> <20>ð<EFBFBD> <20><> <20>Ķ<EFBFBD><C4B6><EFBFBD>
if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면
{
//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
// args : BlendingTime
@ -243,8 +243,8 @@ void CActorInstance::ComboProcess()
{
m_isPreInput = FALSE;
if (!IsUsingSkill()) // m_isNextPreInput<EFBFBD><EFBFBD> Ȱ<><C8B0><EFBFBD><EFBFBD> <20>϶<EFBFBD><CFB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>
if (m_isNextPreInput) // Ȱ<EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> ĵ<><C4B5> <20>Ǵ°<C7B4> <20>̰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!IsUsingSkill()) // m_isNextPreInput는 활모드 일때만 사용하는 변수
if (m_isNextPreInput) // 활일때만 스킬이 캔슬 되는건 이곳 때문임
{
__RunNextCombo();
m_isNextPreInput = FALSE;
@ -288,7 +288,7 @@ void CActorInstance::__RunNextCombo()
ComboAttack(wcurComboMotionIndex, m_fAtkDirRot, 0.1f);
////////////////////////////////
// <EFBFBD>޺<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>
// 콤보가 끝났다면
if (m_dwcurComboIndex == pComboData->ComboIndexVector.size())
{
__OnEndCombo();
@ -302,8 +302,8 @@ void CActorInstance::__OnEndCombo()
m_dwcurComboIndex = 1;
}
// <EFBFBD><EFBFBD><EFBFBD><20>޺<EFBFBD><DEBA><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>ؼ<EFBFBD> <20>ȵȴ<C8B5>.
// <EFBFBD>޺<EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޺<EFBFBD><DEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Motion <20><> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> Wait <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
// 여기서 콤보를 초기화 해선 안된다.
// 콤보가 초기화 되는 곳은 마지막 콤보가 끝나고 Motion 이 자동으로 Wait 으로 돌아가는 시점이다.
}
void CActorInstance::__ClearCombo()
@ -566,7 +566,7 @@ bool CActorInstance::__CanPushDestActor(CActorInstance& rkActorDst)
if (rkActorDst.IsNPC())
return false;
// <EFBFBD>Ŵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>и<EFBFBD> <20><><EFBFBD><EFBFBD>
// 거대 몬스터 밀림 제외
extern bool IS_HUGE_RACE(unsigned int vnum);
if (IS_HUGE_RACE(rkActorDst.GetRace()))
return false;
@ -587,15 +587,15 @@ bool IS_PARTY_HUNTING_RACE(unsigned int vnum)
{
return true;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// 모든 몬스터 파티 사냥 적용
/*
if (vnum < 8) // <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD>
if (vnum < 8) // 플레이어
return true;
if (vnum >= 8000 && vnum <= 8112) // <EFBFBD><EFBFBD>ƾ<EFBFBD><EFBFBD>
if (vnum >= 8000 && vnum <= 8112) // 메틴석
return true;
if (vnum >= 2400 && vnum < 5000) // õ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (vnum >= 2400 && vnum < 5000) // 천의 동굴 이후 몬스터
return true;
return false;
@ -623,13 +623,13 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
// Invisible Time
if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
{
if (uiSkill) // <EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> <20><>ų<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
if (uiSkill) // 파티 사냥 몬스터라도 스킬이면 무적시간 적용
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
if (m_isMain) // #0000794: [M2KR] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><EFBFBD><EBB7B1> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20>ڽ<EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD>Ѱ͸<D1B0> üũ<C3BC>Ѵ<EFBFBD>
if (m_isMain) // #0000794: [M2KR] 폴리모프 - 밸런싱 문제 타인 공격에 의한 무적 타임은 고려하지 않고 자신 공격에 의한것만 체크한다
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
}
else // <EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD>
else // 파티 사냥 몬스터가 아닐 경우만 적용
{
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
}
@ -640,7 +640,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
// Hit Effect
D3DXVECTOR3 vec3Effect(rVictim.m_x, rVictim.m_y, rVictim.m_z);
// #0000780: [M2KR] <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<>ݱ<EFBFBD> <20><><EFBFBD><EFBFBD>
// #0000780: [M2KR] 수룡 타격구 문제
extern bool IS_HUGE_RACE(unsigned int vnum);
if (IS_HUGE_RACE(rVictim.GetRace()))
{
@ -651,7 +651,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
float fHeight = D3DXToDegree(atan2(-vec3Effect.x + v3Pos.x,+vec3Effect.y - v3Pos.y));
// 2004.08.03.myevan.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>
// 2004.08.03.myevan.빌딩이나 문의 경우 타격 효과가 보이지 않는다
if (rVictim.IsBuilding()||rVictim.IsDoor())
{
D3DXVECTOR3 vec3Delta=vec3Effect-v3Pos;
@ -673,7 +673,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
if (rVictim.IsBuilding())
{
// 2004.08.03.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E9B8AE> <20>̻<EFBFBD><CCBB>ϴ<EFBFBD>
// 2004.08.03.빌딩의 경우 흔들리면 이상하다
}
else if (rVictim.IsStone() || rVictim.IsDoor())
{

View File

@ -34,7 +34,7 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc
{
if (!pPointInstance)
{
assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // <EFBFBD><EFBFBD><EFBFBD>۷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD>Ͻÿ<CFBD>
assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // 레퍼런스로 교체하시오
return;
}
@ -95,12 +95,12 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc
void CActorInstance::UpdateAdvancingPointInstance()
{
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>;<EFBFBD> <20>Ѵ<EFBFBD> - [levites]
// 말을 탔을 경우 사람은 이동값을 가지고 있지 않기 때문에 말로 부터 얻어와야 한다 - [levites]
D3DXVECTOR3 v3Movement = m_v3Movement;
if (m_pkHorse)
v3Movement = m_pkHorse->m_v3Movement;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>ʾƵ<CABE> <20>ȴ<EFBFBD> - [levites]
// 말은 업데이트 하지 않아도 된다 - [levites]
if (m_pkHorse)
m_pkHorse->UpdateAdvancingPointInstance();
@ -169,7 +169,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector
{
if (!c_pAttackingSphereVector)
{
assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // <EFBFBD><EFBFBD><EFBFBD>۷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD>Ͻÿ<CFBD>
assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // 레퍼런스로 교체하시오
return false;
}
@ -186,7 +186,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector
if (DetectCollisionDynamicSphereVSDynamicSphere(c_rAttackingSphere, c_rDefendingSphere))
{
// FIXME : <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƴ<EFBFBD><C6B3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20>Ѵ<EFBFBD>.
// FIXME : 두 원의 교점을 찾아내는 식으로 바꿔야 한다.
*pv3Position = (c_rAttackingSphere.v3Position + c_rDefendingSphere.v3Position) / 2.0f;
return true;
}
@ -200,19 +200,19 @@ bool CActorInstance::CreateCollisionInstancePiece(DWORD dwAttachingModelIndex, c
{
if (!c_pAttachingData)
{
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // <EFBFBD><EFBFBD><EFBFBD>۷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD>Ͻÿ<CFBD>
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // 레퍼런스로 교체하시오
return false;
}
if (!c_pAttachingData->pCollisionData)
{
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // <EFBFBD><EFBFBD><EFBFBD>۷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD>Ͻÿ<CFBD>
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // 레퍼런스로 교체하시오
return false;
}
if (!pPointInstance)
{
assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // <EFBFBD><EFBFBD><EFBFBD>۷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD>Ͻÿ<CFBD>
assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // 레퍼런스로 교체하시오
return false;
}
@ -279,18 +279,18 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
const NRaceData::TAttackData & c_rAttackData = c_pAttackingEvent->AttackData;
THittedInstanceMap & rHittedInstanceMap = m_kSplashArea.HittedInstanceMap;
// NOTE : <EFBFBD>̹<EFBFBD> <20><><EFBFBD>ȴٸ<C8B4> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
// NOTE : 이미 때렸다면 때릴 수 없음
if (rHittedInstanceMap.end() != rHittedInstanceMap.find(&rVictim))
{
return FALSE;
}
// NOTE : Snipe <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD>..
// NOTE : Snipe 모드이고..
if (NRaceData::ATTACK_TYPE_SNIPE == c_rAttackData.iAttackType)
{
// Target <EFBFBD><EFBFBD> PC <EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
// Target PC 라면..
if (__IsFlyTargetPC())
// <EFBFBD>ٸ<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
// 다른 객체는 때릴 수 없다
if (!__IsSameFlyTarget(&rVictim))
return FALSE;
@ -299,7 +299,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
{
CActorInstance * pActorInstance = (CActorInstance *)m_kFlyTarget.GetFlyTarget();
// NOTE : Target <EFBFBD><EFBFBD> PC <EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD> <20>Ѹ<EFBFBD><D1B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
// NOTE : Target PC 일때는 한명만 때릴 수 있다.
if (pActorInstance->IsPC())
if (&rVictim != pActorInstance)
return FALSE;
@ -333,7 +333,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
{
// Check Distance
// NOTE - <EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> üũ<C3BC><C5A9> <20>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>
// NOTE - 일단 근접 체크만 하고 있음
D3DXVECTOR3 v3Distance(rVictim.m_x - m_x, rVictim.m_z - m_z, rVictim.m_z - m_z);
float fDistance = D3DXVec3LengthSq(&v3Distance);
@ -362,7 +362,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
{
const NRaceData::THitData & c_rHitData = *itorHitData;
// NOTE : <EFBFBD>̹<EFBFBD> <20>¾Ҵ<C2BE><D2B4><EFBFBD> üũ
// NOTE : 이미 맞았는지 체크
THitDataMap::iterator itHitData = m_HitDataMap.find(&c_rHitData);
if (itHitData != m_HitDataMap.end())
{
@ -437,7 +437,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
//Tracef(" ----------- Next Hit : %d\n", itHitData->second.size());
int iCurrentHitCount = itHitData->second.size();
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16<31><36><EFBFBD><EFBFBD> <20>Ѱ<EFBFBD>
// NOTE : 보통 공격은 16명이 한계
if (NRaceData::MOTION_TYPE_COMBO == pad->iMotionType || NRaceData::MOTION_TYPE_NORMAL == pad->iMotionType)
{
if (iCurrentHitCount > 16)
@ -458,7 +458,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
D3DXVECTOR3 v3HitPosition = (GetPosition() + rVictim.GetPosition()) *0.5f;
// #0000780: [M2KR] <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<>ݱ<EFBFBD> <20><><EFBFBD><EFBFBD>
// #0000780: [M2KR] 수룡 타격구 문제
extern bool IS_HUGE_RACE(unsigned int vnum);
if (IS_HUGE_RACE(rVictim.GetRace()))
{
@ -503,8 +503,8 @@ BOOL CActorInstance::TestPhysicsBlendingCollision(CActorInstance & rVictim)
if (fDistance > 800.0f*800.0f)
return FALSE;
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>϶<EFBFBD><CFB6><EFBFBD> Defending Sphere<EFBFBD><EFBFBD> Collision Check<EFBFBD><EFBFBD> <20>մϴ<D5B4>.
// NOTE : Wait<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD>߿<EFBFBD> <20>հ<EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־.. - [levites]
// NOTE : 공격 중일때는 Defending Sphere Collision Check를 합니다.
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
TCollisionPointInstanceList * pMainList;
TCollisionPointInstanceList * pVictimList;
if (isAttacking() || IsWaiting())
@ -589,17 +589,17 @@ BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim)
return FALSE;
// Check Distance
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ָ<EFBFBD> üũ <20><><EFBFBD><EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ŵ<EFBFBD>ó<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> ũ<>Ⱑ Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// ij<EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> Body Sphere Radius <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ũ<><C5A9> <20>̵<EFBFBD><CCB5>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϰ<EFBFBD>,
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD> <20>ʴٸ<CAB4> <20>Ÿ<EFBFBD><C5B8><EFBFBD> üũ<C3BC>ؼ<EFBFBD> <20>ɷ<EFBFBD><C9B7>ش<EFBFBD>.
// NOTE : 적당히 멀면 체크 안함
// 프레임 스킵시나 대상 오브젝트의 크기가 클경우 문제가 생길 여지가 있음
// 캐릭터가 자신의 Body Sphere Radius 보다 더 크게 이동했는지를 체크하고,
// 만약 그렇지 않다면 거리로 체크해서 걸러준다.
D3DXVECTOR3 v3Distance = D3DXVECTOR3(rVictim.m_x - m_x, rVictim.m_y - m_y, rVictim.m_z - m_z);
float fDistance = D3DXVec3LengthSq(&v3Distance);
if (fDistance > 800.0f*800.0f)
return FALSE;
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>϶<EFBFBD><CFB6><EFBFBD> Defending Sphere<EFBFBD><EFBFBD> Collision Check<EFBFBD><EFBFBD> <20>մϴ<D5B4>.
// NOTE : Wait<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD>߿<EFBFBD> <20>հ<EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־.. - [levites]
// NOTE : 공격 중일때는 Defending Sphere Collision Check를 합니다.
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
TCollisionPointInstanceList * pMainList;
TCollisionPointInstanceList * pVictimList;
if (isAttacking() || IsWaiting())

View File

@ -79,7 +79,7 @@ bool CActorInstance::SetRace(DWORD eRace)
CGraphicThingInstance::Clear();
//NOTE : PC<EFBFBD><EFBFBD> Part<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
//NOTE : PC Part별로 다 생성하게 해준다.
if( IsPC())
{
CGraphicThingInstance::ReserveModelThing(CRaceData::PART_MAX_NUM);

View File

@ -107,7 +107,7 @@ void CActorInstance::SetFlyEventHandler(IFlyEventHandler * pHandler)
m_pFlyEventHandler = pHandler;
}
// 2004. 07. 07. [levites] - <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ذ<EFBFBD><D8B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
bool CActorInstance::CanChangeTarget()
{
if (__IsNeedFlyTargetMotion())

View File

@ -69,7 +69,7 @@ void CActorInstance::ReservingMotionProcess()
SetEndStopMotion();
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 1<>ʾ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 이후의 모션 전부 1초씩 딜레이
TMotionDeque::iterator itor = m_MotionDeque.begin();
for (; itor != m_MotionDeque.end(); ++itor)
{
@ -99,11 +99,11 @@ void CActorInstance::ReservingMotionProcess()
if (IsDead())
{
//Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xBB\xE7\xB8\xC1");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD>
// 예전 데이터로 복구
m_kCurMotNode=kPrevMotionNode;
__ClearMotion();
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// 이전 동작 마지막 상태 유지
SetEndStopMotion();
return;
}
@ -129,7 +129,7 @@ void CActorInstance::ReservingMotionProcess()
if (0 == dwRealMotionKey)
return;
// FIX: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> __SetMotion <EFBFBD>Լ<EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> duration<6F><6E> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> duration<6F><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20><>.
// FIX: 위에서 호출한 __SetMotion 함수 안에서 랜덤으로 다른 모션을 재생할 가능성도 있으므로 duration은 '현재 재생중인' 모션의 duration값을 사용해야 함.
//float fDurationTime=rReservingMotionNode.fDuration;
float fDurationTime = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
float fStartTime = rReservingMotionNode.fStartTime;
@ -153,7 +153,7 @@ void CActorInstance::ReservingMotionProcess()
void CActorInstance::CurrentMotionProcess()
{
if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // <EFBFBD>ӽô<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> Once<63><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20>ȵȴ<C8B5>. - [levites]
if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // 임시다. 최종적인 목표는 Once도 절대로 넘어가선 안된다. - [levites]
if (m_kCurMotNode.dwcurFrame >= m_kCurMotNode.dwFrameCount)
m_kCurMotNode.dwcurFrame = 0;
@ -169,7 +169,7 @@ void CActorInstance::CurrentMotionProcess()
bool isLooping=false;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD> Playing Flag<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// 끝났다면 Playing Flag를 끈다
if (m_pkCurRaceMotionData && m_pkCurRaceMotionData->IsLoopMotion())
{
if (m_kCurMotNode.iLoopCount > 1 || m_kCurMotNode.iLoopCount == -1)
@ -332,7 +332,7 @@ void CActorInstance::SetLoopMotion(DWORD dwMotion, float fBlendTime, float fSpee
m_kCurMotNode.uSkill = 0;
}
// <EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> == SetMotion<EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> == <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִϸ<D6B4><CFB8>̼<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20>ߴ<EFBFBD><DFB4><EFBFBD>?
// 리턴값 == SetMotion의 리턴값 == 실제로 애니메이션 데이터를 플레이 했느냐?
bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime, UINT uSkill, float fSpeedRatio)
{
if (!m_pkCurRaceData)
@ -379,8 +379,8 @@ bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion,
assert(NULL != m_pkCurRaceMotionData);
// FIX : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> __SetMotion <EFBFBD>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dwMotionKey<65><79><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> Ű<><C5B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> duration<6F><6E> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><EFBFBD><E7BFAC> <20><><EFBFBD><EFBFBD> play<61><79><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD>ؾ<EFBFBD> <20><>.. -_-;;
// FIX : 위에서 호출한 __SetMotion 함수 내에서 랜덤으로 다른 모션을 선택할 수도 있기 때문에 dwMotionKey값은 유효하지 않고
// 따라서 해당 키로 산출한 duration은 유효하지 않음. 당연히 현재 play중인 모션의 시간을 구해야 함.. -_-;;
// float fDuration=GetMotionDuration(dwMotionKey)/fSpeedRatio;
float fDuration = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
@ -588,8 +588,8 @@ float CActorInstance::GetMotionDuration(DWORD dwMotionKey)
MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
{
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3> <20>Ǵ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - [levites]
// FIXME : ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD>.
// NOTE : 자주 호출 되는 부분은 아니지만 어느 정도의 최적화 여지가 있음 - [levites]
// FIXME : 처음에 선택된 모션이 없는 것에 대한 처리가 되어 있지 않다.
WORD wMode = GET_MOTION_MODE(dwMotionKey);
WORD wIndex = GET_MOTION_INDEX(dwMotionKey);
@ -608,7 +608,7 @@ MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
dwMotionKey = MAKE_RANDOM_MOTION_KEY(wMode, wIndex, i);
// Temporary
// NOTE: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> <20><><EFBFBD><20>غ<EFBFBD><D8BA><EFBFBD> <20>ǹ̾<C7B9><CCBE><EFBFBD>. <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<>ΰ<EFBFBD><CEB0><EFBFBD> <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ذ<EFBFBD><D8B0>ؾ<EFBFBD> <20>ϹǷ<CFB9> <20>ϴ<EFBFBD> <20>ּ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>. <20><><EFBFBD>߿<EFBFBD> <20><>ä<EFBFBD><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
// NOTE: 현재로선 여기서 해봤자 의미없다. 전체적으로 확인결과 아래는 씹히는 코드고 다른곳에서 해결해야 하므로 일단 주석처리함. 나중에 통채로 지우자..
// m_kCurMotNode.fEndTime = m_kCurMotNode.fStartTime + GetMotionDuration(dwMotionKey);
// Temporary
@ -689,7 +689,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
}
// NOTE : <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ - [levites]
// NOTE : 스킬 사용중 사라지는 문제를 위한 안전 장치 - [levites]
if (__IsHiding())
{
__ShowEvent();
@ -719,7 +719,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
m_pkHorse->__BindMotionData(dwChildMotKey);
if (c_rkSetMotData.iLoopCount)
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // 무조건 이전 모션 타입으로 설정되고 있었음
else
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_LOOP;
@ -741,7 +741,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
if (__CanAttack())
{
// <EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>մϴ<D5B4> - [levites]
// 여기서 공격 모션일 경우의 처리를 합니다 - [levites]
__ShowWeaponTrace();
m_HitDataMap.clear();
@ -752,11 +752,11 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
{
if (!__CanNextComboAttack())
{
// 2004.11.19.myevan.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ž<EFBFBD> <20>̺κп<CEBA><D0BF><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD>µǾ<C2B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȳ<EFBFBD><C8B3>´<EFBFBD>
m_dwcurComboIndex = 0; // <EFBFBD>޺<EFBFBD> <20><><EFBFBD><EFBFBD> - [levites]
// 2004.11.19.myevan.동물 변신시 이부분에서 바로 리셋되어 다음동작 안나온다
m_dwcurComboIndex = 0; // 콤보 리셋 - [levites]
// NOTE : ClearCombo() <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> <20>ȵȴ<C8B5>.
// <EFBFBD>޺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20>̾ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> m_pkCurRaceMotionData<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// NOTE : ClearCombo() 를 수행해서는 안된다.
// 콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다.
//Tracef("MotionData\xBF\xA1 \xC4\xDE\xBA\xB8 \xB5\xA5\xC0\xCC\xC5\xB8\xB0\xA1 \xB5\xE9\xBE\xEE \xC0\xD6\xC1\xF6 \xBE\xCA\xBD\xC0\xB4\xCF\xB4\xD9.\n");
}
}

View File

@ -303,7 +303,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD
if (CRaceMotionData::MOTION_EVENT_TYPE_WARP != c_pData->iType)
return;
// FIXME : TMotionWarpEventData<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> - [levites]
// FIXME : TMotionWarpEventData로 뺄 변수 - [levites]
static const float sc_fDistanceFromTarget = 270.0f;
if (m_kFlyTarget.IsValidTarget())
@ -315,7 +315,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD
D3DXVec3Normalize(&v3Distance, &v3Distance);
TPixelPosition DestPixelPosition = c_rv3TargetPosition - (v3Distance * sc_fDistanceFromTarget);
// 2004.07.05.myevan.<EFBFBD>ý<EFBFBD>ź<EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD>̴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ذ<EFBFBD>. <20><>ǥ<EFBFBD><C7A5>ġ<EFBFBD><C4A1> <20>̵<EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결. 목표위치가 이동 못하는 곳일 경우 이동하지 않는다
IBackground& rkBG=GetBackground();
if (!rkBG.IsBlock(DestPixelPosition.x, -DestPixelPosition.y))
SetPixelPosition(DestPixelPosition);

View File

@ -38,8 +38,8 @@ void CActorInstance::OnRender()
kMtrl.Diffuse=D3DXCOLOR(m_dwMtrlColor);
STATEMANAGER.SetMaterial(&kMtrl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD> Diffuse<EFBFBD><EFBFBD> Blend<EFBFBD><EFBFBD> <20>и<EFBFBD><D0B8><EFBFBD>..
// <EFBFBD>ƴϸ<EFBFBD> <20>̷<EFBFBD> <20><><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD> Texture & State Sorting <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.. - [levites]
// 현재는 이렇게.. 최종적인 형태는 Diffuse Blend의 분리로..
// 아니면 이런 형태로 가되 Texture & State Sorting 지원으로.. - [levites]
STATEMANAGER.SaveRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
switch(m_iRenderMode)

View File

@ -62,7 +62,7 @@ void CActorInstance::RotationProcess()
m_fcurRotation = m_rotEnd;
}
// FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"<EFBFBD><EFBFBD> <20>ٲ۴<D9B2>. - [levites]
// FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"로 바꾼다. - [levites]
if (0.0f != m_rotX || 0.0f != m_rotY)
{
CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation);

View File

@ -483,7 +483,7 @@ void CArea::__Load_BuildObjectInstances()
__SetObjectInstance(*it, c_pObjectData);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD>
// 최적화용
if ((*it)->dwType == prt::PROPERTY_TYPE_BUILDING)
m_GraphicThingInstanceCRCMap.insert(TGraphicThingInstanceCRCMap::value_type( (*it)->pThingInstance, c_pObjectData->dwCRC ) );
}
@ -718,7 +718,7 @@ void CArea::__SetObjectInstance_SetDungeonBlock(TObjectInstance * pObjectInstanc
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
{
// OBB<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>.
// OBB를 사용한 충돌 정보 자동 생성.
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
@ -736,7 +736,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
const bool bIsDungeonObject = (std::string::npos != attrFileName.find("/dungeon/")) || (std::string::npos != attrFileName.find("\\dungeon\\"));
// NOTE: dungeon <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> Dummy Collision<EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>. <20>̷<EFBFBD><CCB7><EFBFBD> <20>ϱ<EFBFBD><CFB1><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>)
// NOTE: dungeon 오브젝트는 Dummy Collision을 자동으로 생성하지 않도록 함 (던전의 경우 더미 컬리전때문에 문제가 된 경우가 수차례 있었음. 이렇게 하기로 그래픽 팀과 협의 완료)
if (pAttributeData->IsEmpty() && false == bIsDungeonObject)
{
if (NULL != pObjectInstance && NULL != pObjectInstance->pThingInstance)
@ -778,7 +778,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
/*
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
{
// AABB<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>.
// AABB를 사용한 충돌 정보 자동 생성.
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
@ -806,7 +806,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
collision.v3Position = (v3Min + v3Max) * 0.5f;
D3DXVECTOR3 vDelta = (v3Max - v3Min);
collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max<EFBFBD><EFBFBD> <20><><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݰ<EFBFBD> <20><><EFBFBD><EFBFBD>
collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max를 구하기 위한 가로, 세로, 높이의 절반값 저장
collision.fDimensions[1] = vDelta.y * 0.5f;
collision.fDimensions[2] = vDelta.z * 0.5f;
@ -830,7 +830,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
/*
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
{
// Sphere<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>.
// Sphere를 사용한 충돌 정보 자동 생성.
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
@ -940,7 +940,7 @@ bool CArea::__Load_LoadObject(const char * c_szFileName)
ObjectData.Position.z = atof(c_rstrzPosition.c_str());
ObjectData.dwCRC = atoi (c_rstrCRC.c_str());
// 20041217.myevan.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// 20041217.myevan.로테이션 공식 변경
ObjectData.InitializeRotation(); //ObjectData.m_fYaw = ObjectData.m_fPitch = ObjectData.m_fRoll = 0;
if (rVector.size() > 4)
{
@ -1040,7 +1040,7 @@ bool CArea::__Load_LoadAmbience(const char * c_szFileName)
ObjectData.dwCRC = atoi (c_rstrCRC.c_str());
ObjectData.dwRange = atoi(c_rstrRange.c_str());
// 20041217.myevan.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD> <20>ʱ<EFBFBD>ȭ
// 20041217.myevan.로테이션 초기화
ObjectData.InitializeRotation();
ObjectData.m_fHeightBias = 0.0f;
ObjectData.fMaxVolumeAreaPercentage = 0.0f;
@ -1274,7 +1274,7 @@ void CArea::__Clear_DestroyObjectInstance(TObjectInstance * pObjectInstance)
//////////////////////////////////////////////////////////////////////////
// Coordination <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Coordination 관련
void CArea::GetCoordinate(unsigned short * usCoordX, unsigned short * usCoordY)
{
*usCoordX = m_wX;

View File

@ -111,7 +111,7 @@ void TEMP_CAreaLoaderThread::Shutdown()
}
while (!bRet);
WaitForSingleObject(m_hThread, 10000); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20>DZ⸦ 10<31><30> <20><><EFBFBD>ٸ<EFBFBD>
WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림
}
UINT TEMP_CAreaLoaderThread::Execute(void * pvArg)

View File

@ -130,7 +130,7 @@ bool CTerrain::LoadShadowMap(const char * c_pszFileName)
}
//////////////////////////////////////////////////////////////////////////
// Seamless<EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD>...
// Seamless용 새로운 함수들...
//////////////////////////////////////////////////////////////////////////
void CTerrain::CopySettingFromGlobalSetting()
@ -891,7 +891,7 @@ void CTerrain::PutImage16(BYTE *src, BYTE *dst, long src_pitch, long dst_pitch,
for (int x = 0; x < texturewidth; ++x)
{
WORD packed_pixel = src[x] << 8;
//& <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20>Ʊ<EFBFBD><C6B1><EFBFBD>
//& 연산 한번이 아깝다
//WORD packed_pixel = (src[x]&0xF0) << 8;
*((WORD*)(dst+x*2)) = packed_pixel;
}
@ -998,11 +998,11 @@ void CTerrain::_CalculateTerrainPatch(BYTE byPatchNumX, BYTE byPatchNumY)
lpTerrainVertex->kPosition = kPosition;
lpTerrainVertex->kNormal = kNormal;
if (0.5f > kNormal.z) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 30<33><30> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>. Cliff type<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (0.5f > kNormal.z) // 수평으로 부터 30도 이하 각으로 기울어져 있다. Cliff type으로 정의
++wNumCliffType;
else if (0.8660254f > kNormal.z) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 60<36><30> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>. Hill type<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
else if (0.8660254f > kNormal.z) // 수평으로 부터 60도 이하 각으로 기울어져 있다. Hill type으로 정의
++wNumHillType;
else // <EFBFBD><EFBFBD> <20>̻<EFBFBD><CCBB><EFBFBD> plain Ÿ<EFBFBD><EFBFBD>
else // 그 이상은 plain 타입
++wNumPlainType;
if (kPosition.z > fMaxZ)

View File

@ -83,8 +83,8 @@ void CFlyTrace::Update()
}
//1. <EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ټ<EFBFBD><D9BC>ִ<EFBFBD>.
//2. <EFBFBD>ؽ<EFBFBD><EFBFBD>ĸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-
//1. 알파를 쓰려면 색깔만 줄수있다.
//2. 텍스쳐를 쓰려면 알파 없다-_-
struct TFlyVertex

View File

@ -111,7 +111,7 @@ void CFlyingInstance::__SetTargetDirection(const CFlyTarget& c_rkTarget)
{
D3DXVECTOR3 v3TargetPos=c_rkTarget.GetFlyTargetPosition();
// <EFBFBD>ӽ<EFBFBD> <20>ڵ<EFBFBD>
// 임시 코드
if (m_pData->m_bMaintainParallel)
{
v3TargetPos.z += 50.0f;
@ -131,7 +131,7 @@ void CFlyingInstance::__SetTargetNormalizedDirection(const D3DXVECTOR3 & v3Nomal
Vec3TransformQuaternion(&m_v3Accel, &m_pData->m_v3Accel, &m_qRot);
}
// 2004. 3. 26. myevan. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20>ּ<EFBFBD> ó<><C3B3>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD> <20>ʿ<EFBFBD>. <20><><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´ٸ<C2B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӹ޾<D3B9> <20><><EFBFBD><EFBFBD><E9B5B5> <20><><EFBFBD><EFBFBD>
// 2004. 3. 26. myevan. 기능을 몰라 일단 주석 처리. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
void CFlyingInstance::SetFlyTarget(const CFlyTarget & cr_Target)
{
//m_pFlyTarget = pTarget;
@ -462,7 +462,7 @@ bool CFlyingInstance::Update()
if (m_pData->m_bHitOnBackground)
{
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>
// 지형 충돌
if (CFlyingManager::Instance().GetMapManagerPtr())
{
@ -477,7 +477,7 @@ bool CFlyingInstance::Update()
}
}
// <EFBFBD>ǹ<EFBFBD>+<2B><><EFBFBD><EFBFBD> <20>
// 건물+나무 충돌
FCheckBackgroundDuringFlying kCheckBackgroundDuringFlying(v3LastPosition,m_v3Position);
rkCullingMgr.ForInRange(vecStart,fCollisionSphereRadius, &kCheckBackgroundDuringFlying);

View File

@ -82,8 +82,8 @@ BOOL NRaceData::LoadMotionAttackData(CTextFileLoader & rTextFileLoader, TMotionA
if (!LoadAttackData(rTextFileLoader, pData))
return FALSE;
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AttackingType<EFBFBD><EFBFBD> MotionType<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>аԲ<D0B0>..
// NOTE : 기존의 AttackingType MotionType으로 바뀌었음
// 기존 데이타의 경우 없으면 기존 것으로 읽게끔..
if (!rTextFileLoader.GetTokenInteger("motiontype", &pData->iMotionType))
{
if (!rTextFileLoader.GetTokenInteger("attackingtype", &pData->iMotionType))

View File

@ -98,7 +98,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance &
float ta = D3DXVec3Dot(&p,&da)/la/la;
float tb = D3DXVec3Dot(&p,&db)/lb/lb;
// FIXME <EFBFBD><EFBFBD> üũ<C3BC><C5A9> <20>ƴϴ<C6B4>
// FIXME 구 체크가 아니다
if (ta<0)
return false;
@ -146,7 +146,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance &
//*/
/*
// NOTE : AABB üũ <20><> <20><>
// NOTE : AABB 체크 할 것
///////////////////////////////////////////////////////////////////////////////////////////////
D3DXVECTOR3 v3Distance = c_rSphere1.v3Position - c_rSphere2.v3Position;
float fDistance = D3DXVec3Length(&v3Distance);
@ -273,15 +273,15 @@ bool DetectCollisionStaticSphereVSStaticCylinder(const TSphereData & c_rSphere,
bool IsCWAcuteAngle(float begin, float end)
{
// 360 - src + dest // <EFBFBD>ð<EFBFBD> <20>ݴ<EFBFBD> <20><><EFBFBD><EFBFBD>
// src - dest // <EFBFBD>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
// 360 - src + dest // 시계 반대 방향
// src - dest // 시계 방향
return ((360.0f - begin + end) > (begin - end));
}
bool IsCCWAcuteAngle(float begin, float end)
{
// abs(360 - dest + src) // <EFBFBD>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
// dest - src // <EFBFBD>ð<EFBFBD> <20>ݴ<EFBFBD> <20><><EFBFBD><EFBFBD>
// abs(360 - dest + src) // 시계 방향
// dest - src // 시계 반대 방향
int fValue = abs((int) (360.0f - end + begin));
return fValue >= (end - begin) ? true : false;
}
@ -297,7 +297,7 @@ bool IsCCWRotation(float begin, float end)
// 270 90
// 0
//
// <EFBFBD>ð<EFBFBD> <20>ݴ<EFBFBD>
// 시계 반대
return (begin - end < 0);
}

View File

@ -137,7 +137,7 @@ BOOL CItemData::LoadItemData(const char * c_szFileName)
}
// Attaching Data
// Item <EFBFBD><EFBFBD> Attaching Data <EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>.
// Item Attaching Data 일단 없음.
// if (TextFileLoader.SetChildNode("attachingdata"))
// {
// if (!NRaceData::LoadAttachingData(TextFileLoader, &m_AttachingDataVector))
@ -389,10 +389,10 @@ long CItemData::GetSocket(BYTE byIndex) const
return m_ItemTable.alSockets[byIndex];
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!!(<28><><EFBFBD>Ŀ<EFBFBD> <20><>ģ<EFBFBD><C4A3>)
//SocketCount = 1 <EFBFBD≯<EFBFBD> <20>ʱ޹<CAB1><DEB9><EFBFBD>
//SocketCount = 2 <EFBFBD≯<EFBFBD> <20>߱޹<DFB1><DEB9><EFBFBD>
//SocketCount = 3 <EFBFBD≯<EFBFBD> <20><><EFBFBD>޹<EFBFBD><DEB9><EFBFBD>
//서버와 동일 서버 함수 변경시 같이 변경!!(이후에 합친다)
//SocketCount = 1 이면 초급무기
//SocketCount = 2 이면 중급무기
//SocketCount = 3 이면 고급무기
int CItemData::GetSocketCount() const
{
return m_ItemTable.bGainSocketPct;
@ -417,7 +417,7 @@ float CItemData::GetSpecularPowerf() const
return float(uSpecularPower) / 100.0f;
}
//refine <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۹<EFBFBD>ȣ <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD> <20><>ġ<EFBFBD>Ѵ<EFBFBD>-_-(<28><><EFBFBD>̺<EFBFBD><CCBA>̿<EFBFBD><CCBF><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD> <20><><EFBFBD><EFBFBD>)
//refine 값은 아이템번호 끝자리와 일치한다-_-(테이블이용으로 바꿀 예정)
UINT CItemData::GetRefine() const
{
return GetIndex()%10;

View File

@ -73,9 +73,9 @@ bool CMapBase::LoadProperty()
return false;
}
// NOTE: <EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><>, <20><> <20><><EFBFBD><EFBFBD> <20><EFBFBD><EBB7AE> <20><><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD>.
// MapProperty.txt <EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> ParentMapName <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>ִٸ<D6B4>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> ParentMap<61><70><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE>´<EFBFBD>.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κа<CEBA><D0B0><EFBFBD>(<28>κ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ?) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD>뼭, Parent Map<61><70><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD>.
// NOTE: 이미 존재하는 맵 데이터와 동일한 데이터를 사용하는 맵을 새로 추가할 때, 맵 배포 용량을 줄이기 위한 작업.
// MapProperty.txt 파일에 ParentMapName 값이 설정되어 있다면, 실제 모든 데이터는 ParentMap에서 읽어온다.
// 데이터의 부분공유(부분 오버라이트?) 기능은 필요 없대서, Parent Map에서 모든 데이터를 읽어옴.
if (stTokenVectorMap.end() != stTokenVectorMap.find("parentmapname"))
{
m_strParentMapName = stTokenVectorMap["parentmapname"][0];

View File

@ -8,7 +8,7 @@
#include "PropertyLoader.h"
//////////////////////////////////////////////////////////////////////////
// <EFBFBD><20>Լ<EFBFBD>
// 기본 함수
//////////////////////////////////////////////////////////////////////////
bool CMapManager::IsMapOutdoor()

View File

@ -226,8 +226,8 @@ bool CMapOutdoor::Destroy()
void CMapOutdoor::Clear()
{
UnloadWaterTexture();
Destroy(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Initialize(); // <EFBFBD>ʱ<EFBFBD>ȭ
Destroy(); // 해제
Initialize(); // 초기화
}
bool CMapOutdoor::SetTerrainCount(short sTerrainCountX, short sTerrainCountY)

View File

@ -15,7 +15,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
{
static std::string s_strOldPathName="";
// 2004.08.09.myevan.Pack<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD>ϵǴ<CFB5> <20>κ<EFBFBD><CEBA><EFBFBD> <20>ִ<EFBFBD>
// 2004.08.09.myevan.Pack파일을 찾을때.. 폴더명만으로는 그냥 리턴되는 부분이 있다
std::string c_rstrNewPathName=GetName()+"\\cache";
s_strOldPathName=c_rstrNewPathName;
@ -36,7 +36,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
m_lOldReadX = -1;
// TODO: SetRenderingDevice<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Environment<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ƽ <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۵<EFBFBD><DBB5>Ѵ<EFBFBD>.
// TODO: SetRenderingDevice에서 Environment로 부터 라이트 속성을 넘겨줘야 스태틱 라이트가 제대로 작동한다.
CSpeedTreeDirectX::Instance().SetRenderingDevice();
Update(x, y, z);
@ -100,13 +100,13 @@ bool CMapOutdoor::isAreaLoaded(WORD wX, WORD wY)
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(ex. 3x3)<EFBFBD><EFBFBD> <20>ִ<EFBFBD> Terrain<EFBFBD><EFBFBD> Area<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>
// m_pTerrain<EFBFBD><EFBFBD> m_pArea<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// 현재 좌표를 기반으로 주위(ex. 3x3)에 있는 Terrain Area포인터를
// m_pTerrain m_pArea에 연결한다.
void CMapOutdoor::AssignTerrainPtr()
{
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѱ<EFBFBD> <20><> <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ϱ<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> virtual method<EFBFBD><EFBFBD> ȣ<><C8A3> <20>Ѵ<EFBFBD>. <20><> <20>޼ҵ<DEBC><D2B5><EFBFBD> CMapOutDoor<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƹ<EFBFBD> <20>ൿ<EFBFBD><E0B5BF>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
// 월드에디터에서 화면을 죽죽죽 넘길 때 터레인을 저장해야 하기
// 때문에 이 virtual method를 호출 한다. 이 메소드는 CMapOutDoor에서는 아무 행동도
// 하지 않는다.
OnPreAssignTerrainPtr();
short sReferenceCoordMinX, sReferenceCoordMaxX, sReferenceCoordMinY, sReferenceCoordMaxY;
@ -390,14 +390,14 @@ bool CMapOutdoor::LoadSetting(const char * c_szFileName)
std::string stTextureSetFileName = strTextureSet;
// TextureSet <EFBFBD><EFBFBD> <20>̹<EFBFBD> <20>پ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ⱥ<EFBFBD><C8BA>δ<EFBFBD>.
// TextureSet 이 이미 붙어 있을 경우 안붙인다.
if (0 != stTextureSetFileName.find_first_of("textureset", 0))
stTextureSetFileName = "textureset\\"+strTextureSet;
if (!m_TextureSet.Load(stTextureSetFileName.c_str(), m_fTerrainTexCoordBase))
{
#ifdef WORLD_EDITOR
// TextureSet <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾƵ<CABE> <20><><EFBFBD><EFBFBD>
// TextureSet 이 적용되어 있지 않아도 진행
LogBox("TextureSet \xC0\xCC \xC0\xFB\xBF\xEB\xB5\xC7\xBE\xEE\xC0\xD6\xC1\xF6 \xBE\xCA\xC0\xBA \xB8\xCA \xC0\xD4\xB4\xCF\xB4\xD9.\n\xC1\xF6\xC7\xFC \xC5\xD8\xBD\xBA\xC3\xE7 \xC0\xDB\xBE\xF7\xBF\xA1 \xC1\xD6\xC0\xC7\xC7\xCF\xBD\xC3\xB1\xE2 \xB9\xD9\xB6\xF8\xB4\xCF\xB4\xD9.");
#else
TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str());

View File

@ -9,7 +9,7 @@ void CMapOutdoor::BuildQuadTree()
{
FreeQuadTree();
// m_wPatchCount<EFBFBD><EFBFBD> ConvertPatchSplat<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>⼭ üũ<C3BC>Ѵ<EFBFBD>.
// m_wPatchCount ConvertPatchSplat에서도 정한다, 안전을 위해 여기서 체크한다.
if (0 == m_wPatchCount)
{
TraceError("MapOutdoor::BuildQuadTree : m_wPatchCount is zero, you must call ConvertPatchSplat before call this method.");

View File

@ -42,10 +42,10 @@ void CMapOutdoor::RenderTerrain()
__RenderTerrain_RecurseRenderQuadTree(m_pRootNode);
// <EFBFBD>Ÿ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// 거리순 정렬
std::sort(m_PatchVector.begin(),m_PatchVector.end());
// <EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// 그리기 위한 벡터 세팅
if (CTerrainPatch::SOFTWARE_TRANSFORM_PATCH_ENABLE)
__RenderTerrain_RenderSoftwareTransformPatch();
else
@ -133,13 +133,13 @@ void CMapOutdoor::ApplyLight(DWORD dwVersion, const D3DLIGHT9& c_rkLight)
STATEMANAGER.SetLight(0, &c_rkLight);
}
// 2004. 2. 17. myevan. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>̰<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>Ѵ<EFBFBD>
// 2004. 2. 17. myevan. 모든 부분을 보이게 초기화 한다
void CMapOutdoor::InitializeVisibleParts()
{
m_dwVisiblePartFlags=0xffffffff;
}
// 2004. 2. 17. myevan. Ư<EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>̰<EFBFBD> <20>ϰų<CFB0> <20><><EFBFBD>ߴ<EFBFBD> <20>Լ<EFBFBD>
// 2004. 2. 17. myevan. 특정 부분을 보이게 하거나 감추는 함수
void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
{
DWORD dwMask=(1<<ePart);
@ -154,7 +154,7 @@ void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
}
}
// 2004. 2. 17. myevan. Ư<EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>̴<EFBFBD><CCB4><EFBFBD> <20>˾Ƴ<CBBE><C6B3><EFBFBD> <20>Լ<EFBFBD>
// 2004. 2. 17. myevan. 특정 부분이 보이는지 알아내는 함수
bool CMapOutdoor::IsVisiblePart(int ePart)
{
DWORD dwMask=(1<<ePart);
@ -164,7 +164,7 @@ bool CMapOutdoor::IsVisiblePart(int ePart)
return false;
}
// Splat <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// Splat 개수 제한
void CMapOutdoor::SetSplatLimit(int iSplatNum)
{
m_iSplatLimit = iSplatNum;
@ -353,7 +353,7 @@ struct CMapOutdoor_LessThingInstancePtrRenderOrder
{
bool operator() (CGraphicThingInstance* pkLeft, CGraphicThingInstance* pkRight)
{
//TODO : Camera<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//TODO : Camera위치기반으로 소팅
CCamera * pCurrentCamera = CCameraManager::Instance().GetCurrentCamera();
const D3DXVECTOR3 & c_rv3CameraPos = pCurrentCamera->GetEye();
const D3DXVECTOR3 & c_v3LeftPos = pkLeft->GetPosition();
@ -387,7 +387,7 @@ void CMapOutdoor::RenderArea(bool bRenderAmbience)
m_dwRenderedGraphicThingInstanceNum = 0;
m_dwRenderedCRCWithNumberVector.clear();
// NOTE - 20041201.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD> <20>߰<EFBFBD>
// NOTE - 20041201.levites.던젼 그림자 추가
for (int j = 0; j < AROUND_AREA_NUM; ++j)
{
CArea * pArea;

View File

@ -100,7 +100,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch()
std::vector<std::pair<float ,long> >::iterator far_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_far);
std::vector<std::pair<float ,long> >::iterator near_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_near);
// NOTE: Word Editor <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fog far<61><72><EFBFBD><EFBFBD> <20>ָ<EFBFBD><D6B8>ִ<EFBFBD> <20><>ü<EFBFBD><C3BC> <20>ؽ<EFBFBD><D8BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// NOTE: Word Editor 툴에서는 fog far보다 멀리있는 물체를 텍스쳐 없이 그리는 작업을 하지 않음
#ifdef WORLD_EDITOR
near_it = m_PatchVector.begin();
far_it = m_PatchVector.end();
@ -119,7 +119,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch()
DWORD dwFogEnable = STATEMANAGER.GetRenderState(D3DRS_FOGENABLE);
std::vector<std::pair<float, long> >::iterator it = m_PatchVector.begin();
// NOTE: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> view ~ fog near <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fog disabled <EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
// NOTE: 맵툴에서는 view ~ fog near 사이의 지형을 fog disabled 상태로 그리는 작업을 하지 않음.
#ifndef WORLD_EDITOR
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
@ -379,7 +379,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD
}
else
{
// 0<EFBFBD><EFBFBD> <20>ؽ<EFBFBD>ó
// 0번 텍스처
if ( 0 < rTerrainSplatPatch.PatchTileCount[sPatchNum][0] )
{
DWORD dwTextureFactorFor0Texture = STATEMANAGER.GetRenderState(D3DRS_TEXTUREFACTOR);
@ -602,7 +602,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD
*/
#endif
// <EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD>
// 그림자
if (m_bDrawShadow)
{
STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE);

View File

@ -221,7 +221,7 @@ void CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat(SoftwareTransformPat
break;
}
// <EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD>
// 그림자
if (m_bDrawShadow)
{
__SoftwareTransformPatch_SetShadowStream(akTransVertex);

View File

@ -8,7 +8,7 @@
#include "TerrainQuadtree.h"
#include "ActorInstance.h"
// 2004.08.17.myevan.std::vector <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޸<EFBFBD><DEB8><EFBFBD> <20><><EFBFBD>ٿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD>
// 2004.08.17.myevan.std::vector 를 사용할 경우 메모리 접근에 오래걸려 스택쪽으로 계산하도록 수정
class PCBlocker_CDynamicSphereInstanceVector
{
public:
@ -239,7 +239,7 @@ void CMapOutdoor::__Game_UpdateArea(D3DXVECTOR3& v3Player)
D3DXVECTOR3 v3Target = pCamera->GetTarget();
D3DXVECTOR3 v3Eye= pCamera->GetEye();
D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // 빛의 방향
v3Light *= 50.0f / D3DXVec3Length(&v3Light);
/*

View File

@ -69,14 +69,14 @@ void CMapOutdoor::RenderWater()
// RenderState
//////////////////////////////////////////////////////////////////////////
// <EFBFBD><EFBFBD> <20><> <20>Ʒ<EFBFBD> <20>ִϽ<D6B4>Ű<EFBFBD><C5B0>...
// 물 위 아래 애니시키기...
static float s_fWaterHeightCurrent = 0;
static float s_fWaterHeightBegin = 0;
static float s_fWaterHeightEnd = 0;
static DWORD s_dwLastHeightChangeTime = CTimer::Instance().GetCurrentMillisecond();
static DWORD s_dwBlendtime = 300;
// 1.5<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// 1.5초 마다 변경
if ((CTimer::Instance().GetCurrentMillisecond() - s_dwLastHeightChangeTime) > s_dwBlendtime)
{
s_dwBlendtime = random_range(1000, 3000);
@ -116,7 +116,7 @@ void CMapOutdoor::RenderWater()
DrawWater(i->second);
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Ŀ<EFBFBD><C4BF><EFBFBD> <20><> z <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD>
// 렌더링 한 후에는 물 z 위치를 복구
m_matWorldForCommonUse._43 = 0.0f;
//////////////////////////////////////////////////////////////////////////

View File

@ -61,7 +61,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
m_v3Acceleration.y,
m_v3Acceleration.z);
*/
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>صд<D8B5>. <20>ٵ<EFBFBD> 100<30><30><EFBFBD><EFBFBD> ũ<>ٸ<EFBFBD>? ;
// NOTE : 최종 위치를 구해둔다. 근데 100보다 크다면? ;
const int LoopValue = 100;
D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f);
@ -80,7 +80,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
//for (float fRatio = 0.0f; fRatio < 1.0f; fRatio += 0.1f)
//{
// // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> üũ<C3BC>Ѵ<EFBFBD>
// // 좀더 정밀하게 체크한다
// if (pWorld->isPhysicalCollision(c_rvBasePosition + v3Movement * fRatio))
// {
// v3Movement = D3DXVECTOR3 (0.0f, 0.0f, 0.0f);
@ -142,11 +142,11 @@ float CPhysicsObject::GetYMovement()
bool CPhysicsObject::isBlending()
{
// NOTE : IncreaseExternalForce() <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>и<EFBFBD><D0B8><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
// NOTE : IncreaseExternalForce() 에 의해 밀리는 처리중인가?
if (0.0f != D3DXVec3Length(&m_v3Velocity))
return true;
// NOTE : SetLastPosition() <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>и<EFBFBD><D0B8><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
// NOTE : SetLastPosition() 에 의해 밀리는 처리중인가?
if (m_xPushingPosition.isPlaying() ||
m_yPushingPosition.isPlaying())
return true;

View File

@ -5,12 +5,12 @@
#include "PropertyManager.h"
#include "Property.h"
/*
* CProperty <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* CProperty 파일 포맷
*
* 0 ~ 4 bytes: fourcc
* 5 ~ 6 bytes: \r\n
*
* <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ؽ<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* 그 이후의 바이트들은 텍스트 파일 로더와 같은 구조
*/
CProperty::CProperty(const char * c_pszFileName) : mc_pFileName(NULL), m_dwCRC(0)
{
@ -68,9 +68,9 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector)
if (m_stTokenMap.end() == it)
return false;
// NOTE : ƨ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
// NOTE : 튕김 현상 발견
// std::copy(rTokenVector.begin(), it->second.begin(), it->second.end());
// NOTE : <EFBFBD><EFBFBD><EFBFBD>۷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϰԲ<CFB0> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD>
// NOTE : 레퍼런스에는 이런 식으로 하게끔 되어 있음
///////////////////////////////////////////////////////////////////////////////
// template <class InputIterator, class OutputIterator>
// OutputIterator copy(InputIterator first, InputIterator last,
@ -82,11 +82,11 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector)
// copy(V.begin(), V.end(), L.begin());
// assert(equal(V.begin(), V.end(), L.begin()));
///////////////////////////////////////////////////////////////////////////////
// <EFBFBD><20>׷<EFBFBD><D7B7><EFBFBD> ƨ<><C6A8>. - [levites]
// 헌데 그래도 튕김. - [levites]
// std::copy(it->second.begin(), it->second.end(), rTokenVector.begin());
// <EFBFBD><20>̷<EFBFBD><CCB7><EFBFBD>.. - [levites]
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp
// 결국 이렇게.. - [levites]
// 현재 사용하는 곳 : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp
CTokenVector & rSourceTokenVector = it->second;
CTokenVector::iterator itor = rSourceTokenVector.begin();
for (; itor != rSourceTokenVector.end(); ++itor)
@ -102,7 +102,7 @@ void CProperty::PutString(const char * c_pszKey, const char * c_pszString)
std::string stTempKey = c_pszKey;
stl_lowers(stTempKey);
// <EFBFBD>̹<EFBFBD> <20>ִ°<D6B4> <20><><EFBFBD><EFBFBD>
// 이미 있는걸 지움
CTokenVectorMap::iterator itor = m_stTokenMap.find(stTempKey);
if (itor != m_stTokenMap.end())

View File

@ -33,10 +33,10 @@ DWORD CPropertyLoader::RegisterFile(const char * c_szPathName, const char * c_sz
stl_lowers(stExt);
stl_lowers(strFileName);
// <EFBFBD>н<EFBFBD><EFBFBD><EFBFBD> <20>ҹ<EFBFBD><D2B9>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \\ <EFBFBD><EFBFBD> / <EFBFBD><EFBFBD> <20>ٲ۴<D9B2>.
// 패스를 소문자로 만들고 \\ / 로 바꾼다.
StringPath(strFileName);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRC ó<><C3B3> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRC)
// 예약된 CRC 처리 (지워진 CRC)
if (0 == strFileName.compare("property/reserve"))
{
m_pPropertyManager->LoadReservedCRC(strFileName.c_str());

View File

@ -53,8 +53,8 @@ bool CPropertyManager::Initialize(const char * c_pszPackFileName)
else
{
m_isFileMode = true;
// NOTE : <EFBFBD><EFBFBD><EFBFBD> Property<EFBFBD><EFBFBD> <20><><EFBFBD>Ͻ<EFBFBD>Ű<EFBFBD><C5B0> WorldEditor<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD> ;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Property Tree List<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѿ<EFBFBD> <20>DZ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٱ<EFBFBD><D9B1>ʿ<EFBFBD><CABF><EFBFBD>.. - [levites]
// NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ;
// 또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites]
}
return true;
@ -193,7 +193,7 @@ bool CPropertyManager::Put(const char * c_pszFileName, const char * c_pszSourceF
if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE))
return false;
if (!m_isFileMode) // <EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD>
if (!m_isFileMode) // 팩 파일에도 넣음
{
if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,""))
{
@ -219,7 +219,7 @@ bool CPropertyManager::Erase(DWORD dwCRC)
DeleteFile(pProperty->GetFileName());
ReserveCRC(pProperty->GetCRC());
if (!m_isFileMode) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20>ƴϸ<C6B4> <20>ѿ<EFBFBD><D1BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움
m_pack.Delete(pProperty->GetFileName());
FILE * fp = fopen("property/reserve", "a+");

View File

@ -323,17 +323,17 @@ CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex
return NULL;
}
// 2004. 3. 15. myevan. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>dz<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>Ѵ<EFBFBD>.
// 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다.
pRaceMotionData->SetName(wMotionIndex);
/////
// FIXME : <EFBFBD>̹<EFBFBD> GR2<EFBFBD><EFBFBD> <20>ε<EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><ECBFA1> <20><EFBFBD><EEB6BB> <20>ؾ<EFBFBD> <20>ϴ°<CFB4>?
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ȱ<EFBFBD><C8B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20><> <20>߰<EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. - [levites]
// FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가?
// 현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites]
return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
// 2004.09.03.myevan.<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <20><>ó
// 2004.09.03.myevan.새로운함수로 대처
//TMotion Motion;
//Motion.byPercentage = byPercentage;
//Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName());

View File

@ -73,7 +73,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName)
}
/////////////////////////
// Temporary - <EFBFBD>̺<EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
// Temporary - 이벤트를 위한 임시 기능
TextFileLoader.GetTokenString("specialpath", &strPathName);
/////////////////////////
@ -146,7 +146,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName)
}
/////////////////////////
// Temporary - <EFBFBD>̺<EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
// Temporary - 이벤트를 위한 임시 기능
TextFileLoader.GetTokenString("specialpath", &strPathName);
/////////////////////////

View File

@ -51,7 +51,7 @@ void __GetRaceResourcePathes(unsigned race, std::vector <std::string>& vec_stPat
vec_stPathes.push_back ("d:/ymir work/guild/");
}
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 만우절 이벤트용 예외 몬스터
else if (8507 == race || 8510 == race)
{
vec_stPathes.push_back ("d:/ymir work/monster2/");
@ -273,8 +273,8 @@ bool CRaceManager::__LoadRaceMotionList(CRaceData& rkRaceData, const char* pathN
if (s_kMap_stType_dwIndex.end() == fTypeIndex)
{
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> WAIT, WAIT4, WAIT20 <EFBFBD>̷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϵǾ<CFB5> <20><><EFBFBD><EFBFBD> <20><>,
// WAIT4, WAIT20<EFBFBD><EFBFBD> WAIT<EFBFBD><EFBFBD> <20>ν<EFBFBD><CEBD><EFBFBD> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> ó<><C3B3>
// 모션 목록에 WAIT, WAIT4, WAIT20 이런 식으로 등록되어 있을 때,
// WAIT4, WAIT20 WAIT로 인식할 수 있도록 처리
const size_t c_cutLengthLimit = 2;
bool bFound = false;

View File

@ -124,7 +124,7 @@ void CSnowEnvironment::__ApplyBlur()
// BlurVertex(D3DXVECTOR3(wTextureSize,0.0f,0.0f),1.0f, alphaColor, 1,0) ,
// BlurVertex(D3DXVECTOR3(0.0f,wTextureSize,0.0f),1.0f, alphaColor, 0,1) ,
// BlurVertex(D3DXVECTOR3(wTextureSize,wTextureSize,0.0f),1.0f, alphaColor, 1,1) };
// //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ؽ<EFBFBD><D8BD>ĸ<EFBFBD> <20><><EFBFBD>´<EFBFBD>.
// //누적 블러 텍스쳐를 찍는다.
// STATEMANAGER.SetTexture(0,m_lpAccumTexture);
// STATEMANAGER.SetVertexShader( D3DFVF_XYZRHW | D3DFVF_DIFFUSE|D3DFVF_TEX1 );
// STATEMANAGER.DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,V,sizeof(BlurVertex));

View File

@ -32,7 +32,7 @@ void CWeaponTrace::Update(float fReachScale)
if (!m_pInstance)
return;
{
// <EFBFBD>ܻ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
// 잔상을 남기는 시간 범위 내의 점들만 유지합니다.
TTimePointList::iterator it;
for(it=m_ShortTimePointList.begin();it!=m_ShortTimePointList.end();++it)
{
@ -69,7 +69,7 @@ void CWeaponTrace::Update(float fReachScale)
mat._41 = pBoneMat->_41;
mat._42 = pBoneMat->_42;
mat._43 = pBoneMat->_43;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
// 현재 위치를 추가합니다.
D3DXMATRIX matPoint;
D3DXMATRIX matTranslation;
D3DXMATRIX matRotation;