게임 자작 전투의 최적화와 관련해서 간단하게 몇 마디.
2010.08.01 19:06
제 작품 동방영강창에서 전투 이벤트를 담당하는 맵입니다.
정기적 병렬 처리 이벤트가 끔찍할 정도로 포진되어 있어서 전투 때만 되면 랙의 향연이 펼쳐집니다.
정상적인 플레이가 거의 불가능한 상황이죠. (완전 실시간 전투라서 훨씬 더 중요한 부분입니다.)
랙의 주범은 위 스샷에서 하얀 사각형+초록색 원으로 체크되어있는 이벤트들입니다. (다른 건 무시해도 됩니다.)
이것들에 '정기적으로 병렬 처리' 이벤트 페이지가 잔뜩 붙어있기 때문에 랙을 유발하는 것이죠.
문제가 되는 이벤트 중 하나. 이런 게 수백 페이지가 있습니다. 끔찍합니다 (...)
(이벤트 수가 아니라 페이지 수입니다. 혼동하면 난감합니다 (...))
"어차피 조건이 만족되어야만 실행되는 이벤트인데, 수백 개가 됐든 수천 개가 됐든 상관없지 않나?"
라고 의문을 표하실지 모르겠습니다만, 이게 최적화의 핵심이 됩니다.
주 원인이 되는 이벤트들을 커먼 이벤트로 집어넣은 상태입니다.
이 이후 전투가 아무 지연 현상 없이 정상적으로 진행될 정도로 가벼워졌습니다.
(이 부분은 플레이하는 컴퓨터의 사양에 따라 약간 다를지도 모르겠지만 말입니다)
이것이 핵심입니다.
이유는 모르겠습니다만, 맵에서 처리하는 정기적 병렬 처리 이벤트와 커먼 이벤트에서
처리하는 정기적 병렬 처리는 아예 구조가 다르게 되어있는 것으로 보입니다.
(물론 저는 알만툴의 제작자가 아니므로 확실하게 답해드리지는 못합니다 (...))
맵에서 처리하는 정기적 병렬 처리 이벤트는 중간에 이벤트가 끊기면 시작점으로 돌아갑니다.
커먼 이벤트에서 처리하는 정기적 병렬 처리 이벤트는 중간에 이벤트가 끊겨도 진행 상황이 계속 유지됩니다.
(즉, 이벤트 처리 조건을 만족하면 끊긴 부분부터 계속해서 진행된다는 의미입니다.)
이 때문에 저는 맵에 정기적 병렬 처리 이벤트가 많으면 랙이 걸리는 것이라고 생각합니다.
정리해서 말씀드리자면, 맵에 존재하는 정기적 병렬 처리 이벤트는 계속해서 이벤트의 진행
상황을 최초의 상태로 되돌리기 때문에, 즉 조건을 만족했든, 만족하지 못했든 상관없이
이벤트를 계속해서 처리하기 때문에 랙이 걸리는 것이라고 생각하고 있습니다.
물론, 이것은 제가 임의로 세운 하나의 가설일 뿐입니다.
저 역시 정확한 원인은 알 수가 없습니다. 이런저런 가설을 생각해봤지만, 이것 외에는
'이벤트가 맵에 있으면 랙이 걸리고 커먼 이벤트에 있으면 랙이 안 걸리는' 이상한 상황을
제가 이해할 수 있도록 설명할 수가 없더군요.
자작 전투를 만들고 계시는 분들께 도움이 될까 해서 몇 자 적어봤습니다. 도움이 되었으면 좋겠습니다.
[여담 / 정작 '이벤트 실행 내용'에 아무것도 없고, '이벤트 시작 조건'도 정기적 병렬 처리가
아니라 그냥 '결정 키로 시작했을 때'이고, '이벤트 출현 조건'에 따라 그저 단순히 이벤트의 '그래픽'이
바뀌는, 즉 "조건에 따라 이벤트의 그래픽만 바뀌는" 이벤트의 경우에도 그 수가 많으면 랙이
심각하게 걸리더군요. 이 경우는.. 정말 저도 이유를 모르겠습니다.]
[추신 / 제가 사용하고 있는 툴은 RPG2003 1.06 버전이므로 다른 툴을 쓰고 계신 경우에는 상황이 다를 수 있습니다.]
댓글 13
-
Yes-Man
2010.08.01 19:17
땡중님 오랜만이네요|+rp2+|341869|+rp3+|free -
땡중
2010.08.01 20:16
아아. 오랜만에 뵙습니다. |+rp+|341869|+rp2+|341871|+rp3+|free -
꼬마사자
2010.08.01 21:02
그건 말이죠,
조건이 붙어있는 이벤트라 해도 맵 안에서 '정기적' 혹은 '자동적'인 실행인 경우
조건이 맞을 때까지 맵 안에서 계속 리사이클링 되고 있지요.
그 갯수가 적정량 이상을 초과하면 메모리에 자극을 줘서 처리하는데 쿨타임이 걸리고
결국 렉.
커먼이벤트는 일단 맵에 구속되지 않고 이벤트 발현이 어디서나 자율적이므로
맵에 박힌 이벤트에 비해 가볍습니다. 대신 커먼이벤트에서의 이벤트 작성은 꽤나 번거롭죠.|+rp2+|341873|+rp3+|free -
꼬마사자
2010.08.01 21:38
특이한 것은. 맵이벤트에. 정기적으로. 대기1초. 이벤트. 하나만넣어두면.
주인공은. 움직일. 수가. 없죠.
커먼이벤트는. 대기1초. 해놔도. 주인공의행동패턴에. 아무관여를. 하지못함.
맵이벤트가. 훨씬. 무겁다는것을. 반증하고있음.|+rp2+|341884|+rp3+|free -
땡중
2010.08.01 21:55
흠.. 맵에 있는 이벤트의 경우에는 무겁게 처리하지만 커먼 이벤트의 경우에는
처리가 가볍게 된다는 것이군요. 과연 그럴 가능성도 있겠군요. |+rp+|341873|+rp2+|341889|+rp3+|free -
땡중
2010.08.01 21:57
이 부분은.. 말씀하신 대로의 조건으로 실험해 봤는데 움직임에는 전혀 지장이 없었습니다.
만약 '주인공이 움직일 수 없다'는 부분이 랙 때문이 아니라 '아예 조작 자체를 듣지 않는다'라면
'정기적으로 병렬 처리'로 설정하지 않고 '자동적으로 시작된다'로 설정해 두신 것이 아닐까 합니다. |+rp+|341884|+rp2+|341890|+rp3+|free -
꼬마사자
2010.08.01 22:07
아참 자동적요....(........) |+rp+|341884|+rp2+|341891|+rp3+|free -
꼬마사자
2010.08.01 22:13
맵에 있는 이벤트는 정기적 처리때 맵에 있는 모든 정기적 실행조건 이벤트를 한번 순환하고 나서
다시 첫번째 정기적 실행조건 이벤트를 실행하고
커먼이벤트는 그 순환점이 그 이벤트 자체가 되므로 가볍다고 할 수 있겠음|+rp2+|341892|+rp3+|free -
die1death
2010.08.02 04:34
오오오 땡붕님 정말 오랜만예요!!
랄가 머리가 아파옵니다;|+rp2+|341960|+rp3+|free -
땡중
2010.08.02 04:53
오우. 오랜만에 뵙는군요.
그나저나 제 이름은 땡붕이 아니라.. [...] |+rp+|341960|+rp2+|341984|+rp3+|free -
die1death
2010.08.02 05:01
아하하; 오타 죄송합니다;
창도는 수정이 안돼서; |+rp+|341960|+rp2+|341994|+rp3+|free -
Black-☆
2010.08.02 05:18
정기적 병렬처리보다는 절대 안 켜지는 스위치를 발동 조건으로 만들어 놓은 뒤 한 이벤트에서 반복 처리로 불러오는 게 좀 더 빠를 듯 하네요. 아무래도 2000년도에 나온 프로그램이다보니(아마 델파이로 만들어졌죠?) 당시에는 컴파일러 최적화 기술도 떨어졌을 뿐더러 알만툴 자체가 좀 성능을 기대할 수는 없어서;;|+rp2+|342010|+rp3+|free -
땡중
2010.08.02 06:06
과연, 그런 방법도 사용해볼 만하겠군요. 감사합니다. |+rp+|342010|+rp2+|342081|+rp3+|free