모드 강좌

C&C3 파이어호크의 부스터가 제대로 표현되게하기

페이지 정보

작성자 티파nDX 아이디로 검색 댓글 0건 조회 5,906회
작성일10-07-02 08:30

본문

스트라토업을 하면 이미 생산된 파혹에는 부스터가 들어오지만 새로 생산된 파혹에는 부스터가 없습니다.

또한 스트라토 노업상태에서 파혹은 비행장에 착륙해 있을때도 연기를 내뿜지요.

이번 강좌를 통해 그 점을 개선해 비행중일때만 불꽃과 연기를 내뿜도록 해보겠습니다.

이번 강좌의 핵심은 본체의 텍스쳐와 부스터의 연기를 독립시키는 것과

AnimationState를 통해 subobject가 나타나거나 사라지게 하는 법을 배우는 것입니다.

-----

i) 본체의 ModelConditionState 바꾸기

GDIFirehawk.xml을 엽니다.  ScriptedModelDraw id="ModuleTag_Draw" 가 있지요?

ParseCondStateType="PARSE_DEFAULT"와

ParseCondStateType="PARSE_NORMAL" ConditionsYes="USER_5" 뒤에

RetainSubObjects="true"를 추가시켜 줍니다.

그다음 ModelConditionState에서 USER_1은 본체와 관계가 없으므로 이게 들어간 거는 다 지우고 봅니다.

왜냐하면 경우의 수만 복잡하게 만들 뿐이기 때문이죠. 이것에 대해 나중에 따로 모듈을 추가합니다.

그리고 ModelConditionState의 순서를 바꿔줘야 합니다. 순서는 이렇습니다.

ParseCondStateType="PARSE_DEFAULT"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="DAMAGED USER_5"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="REALLYDAMAGED USER_5"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="DYING USER_5"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="DAMAGED"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="REALLYDAMAGED"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="DYING"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="USER_5"

이게 까탈스러워서 순서를 따지기 때문에 잘못된 순서가 있으면 십어먹힙니다. 조건이 많이 붙은 쪽이 무조건 위로 와야 합니다.

이제 본체는 끝났습니다.

 

ii) 본체의 AnimationState 바꾸기

여기서부터는 부스터에 관련된 사항입니다.  V4의 로켓이 나타났다가 사라졌다가 하는 원리입니다.

<Script>CurDrawableHideSubObject("exhaust01") CurDrawableHideSubObject("exhaust02")</Script>

가 있을겁니다. 단도직입적으로 말하면 이것은 쓸모가 없습니다. 우리가 다루는 부스터는 Plane04이므로

위의 내용을 <Script>CurDrawableHideSubObjectPermanently("Plane04")</Script> 로 바꿉니다.

Permanently를 붙여야 잘 작동이 됩니다.  Show의 경우에도 마찬가지 방법으로 하시면 됩니다.

<Script>CurDrawableHideSubObject("exhaust01") CurDrawableHideSubObject("exhaust02")</Script>

-->  <Script>CurDrawableShowSubObjectPermanently("Plane04")</Script>

몇가지 Condition을 추가해야되는데 추가해야될 것은 다음과 같습니다.

"TURN_RIGHT USER_1" // "TAKING_OFF USER_1" // "CLIMBING USER_1" // "LANDING USER_1"

(모두 애니메이션은 GUFireHwk_FLYA로 합니다.)

이제 각각의 조건에 따라 Show와 Hide를 결정합니다. 이착륙중에는 부스터가 꺼지도록 하겠습니다.

USER_1이 들어가있지 않은 조건들은 당연히 Hide지요.

ConditionsYes="PACKING_TYPE_1 UNPACKING USER_1"  -> Show

ConditionsYes="PACKING_TYPE_1 PACKING USER_1"  -> Show

ConditionsYes="JUST_BUILT USER_1"  -> Hide

ConditionsYes="MOVING TURN_LEFT_HIGH_SPEED USER_1" -> Show

ConditionsYes="MOVING TURN_RIGHT_HIGH_SPEED USER_1" -> Show

ConditionsYes="TURN_RIGHT_HIGH_SPEED USER_1" -> Show

ConditionsYes="TURN_RIGHT USER_1" -> Show

ConditionsYes="MOVING USER_1" -> Show

ConditionsYes="LOCOMOTOR_TAXIING USER_1" -> Hide

ConditionsYes="TAKING_OFF USER_1" -> Hide

ConditionsYes="CLIMBING USER_1" -> Hide

ConditionsYes="LANDING USER_1" -> Hide

ConditionsYes="DECELERATE USER_1" -> Hide

잠깐 DECELERATE에 대해 말씀드리자면 케분의 파이어호크가 여기서 Show를 하기 때문에

이륙 후 비행하기 직전에 부스터가 잠깐 켜졌다가 꺼지죠.

그리고 사이트에서 약간의 버그라고나 할까요 script의 S가 소문자로 표시되는데 대문자로 바꿔주세요. 

이제 부스터의 불꽃도 끝냈습니다.

 

iii) 부스터의 ModelConditionState 추가하기

여기서는 연기를 다루도록 하겠습니다.

ScriptedModelDraw 엘레멘트를 만듭니다. 부스터 한쪽당 한개니 총 두개가 필요하지요.

ModuleTag_FX에서 복사하시면 되겠습니다. 또한 FXInvisBone은 이미 Include가 되어있으니

걱정말고 쓰기만 하시면 됩니다. 만약 다른 곳에서 쓰실때는 반드시 Include를 하셔야 됩니다.

AttachToBoneInAnotherModule이 매우 중요합니다. 한개는 AttachToBoneInAnotherModule="exhaust01"

나머지 하나를 AttachToBoneInAnotherModule="exhaust02" 로 변경합니다.

필요한 조건들은 다음과 같습니다.

ParseCondStateType="PARSE_NORMAL" ConditionsYes="NONE"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="LOCOMOTOR_TAXIING"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="TAKING_OFF"

ParseCondStateType="PARSE_NORMAL" ConditionsYes="LANDING"

이중에서 나머지는 ParticleSysBone을 없애고 맨위에 조건이 없는 쪽에서만

<ParticleSysBone BoneName="invisbone01" FXParticleSystemTemplate="GDIFireHawkUpgrade02" FollowBone="true" />

을 넣어주시면 되겠습니다. 여기서는 꼭 ParseCondStateType="PARSE_DEFAULT" 대신에

ParseCondStateType="PARSE_NORMAL" ConditionsYes="NONE"을 써야 됩니다. 이게 훨씬 더 좋습니다.

 

iv) SubObjectsUpgrade 모듈 지우기

SubObjectsUpgrade가 있을겁니다. 그 element를 삭제하여 혹시나 생길지 모르는 문제를 피하도록 합시다.

 

 

이번 강좌는 제법 길군요. 읽어주시느라 고생하셨을텐데요 그럼 도움이 되셨길 빌면서 이만 마치도록 하겠습니다.

 

3년만에 버그가 생기는 이유를 알아냈습니다. MOD SDK\LUA\Scripts.lua를 보시면 OnGDIFirehawkCreated

에서 ObjectHideSubObjectPermanently( self, "Plane04", true )이 있었기 때문이었네요.

 

댓글목록

모드 강좌

328건 9 페이지
모드 강좌 목록
번호 제목 글쓴이 조회 날짜
208 RA2 RunStepStrike 아이디로 검색 4422 11-14
207 C&C3 티파nDX 아이디로 검색 5503 09-28
206 TS 크래커 아이디로 검색 5870 04-20
205 C&C3 크래커 아이디로 검색 5631 03-07
204 TS 크래커 아이디로 검색 5563 02-23
203 GEN 대략난감mk2 아이디로 검색 6482 11-28
202 GEN *스카이* 아이디로 검색 5705 11-27
201 GEN 크래커 아이디로 검색 6373 10-04
200 GEN 크래커 아이디로 검색 6636 10-04
199 RA2 소녀지킴이 아이디로 검색 7002 04-23
198 RA2 소녀지킴이 아이디로 검색 6608 04-23
197 GEN 로세니아 아이디로 검색 6154 04-19
196 일반 타베 아이디로 검색 5733 01-05
195 일반 크래커 아이디로 검색 9833 03-17
194 C&C3 ModSDK 아이디로 검색 8759 03-13

검색