본문 바로가기

렌파이/게임 제작하기

렌파이로 육성 시뮬레이션 게임 만들기 (4) DSE 를 이용해 이벤트 만들기 (2)

event.어쩌구() 함수 이용하기

이제 특별한 형태로 & 특별한 조건에서 발생하는 이벤트를 만들어보도록 합시다.

event.once()

* 스트레스가 일정 수치에 도달하면, 좀 쉬어가면서 하라는 식의 안내 이벤트가 튀어나오도록 해봅시다.

* 이 이벤트는 한 번만 나타나면 충분할 겁니다.

* 일단은 스트레스가 5 이상이 되었을 때 이벤트가 등장해야겠고.. 이벤트가 한 번만 나타나도록 하는 조건은..

* event.once() 함수를 사용하면 됩니다. event.once()는 항상 참값을 반환하다가, event.once()가 적힌 이벤트가 실행되고 나면 그 이벤트에 적인 event.once() 는 거짓값을 반환하기 때문에, 한 번만 나타나면 이벤트의 조건으로 사용하면 좋습니다.



event.solo()

* 정신력이 3 미만인 상태에서 휴식 중에 TV를 보다, 우연히 라이벌의 경기를 보고 자극을 받았다.. 는 내용의 이벤트를 만들어보겠습니다.

* 이 이벤트는 휴식 스케쥴이 실행됐을 때, 일반 휴식 이벤트 (rest) 를 대신해서 실행되도록 만들겠습니다.

* 일단 priority 값을 낮게 줘서 이 이벤트의 실행 조건이 먼저 판별되게 한 다음,

* 'act == "휴식" and mental < 3' 이라는 조건에서 실행되도록 적습니다.


* 이걸로 자극 이벤트의 설정은 완료입니다. 손 볼 곳은 rest 이벤트쪽입니다.

event.solo()를 사용한 이벤트는, 이벤트 실행 조건을 충족하였으며 event.solo()를 사용한 이벤트보다 우선도가 높은, 즉, priority 값이 작은 이벤트가 없는 경우에만 실행됩니다. 예제를 이용해서 설명을 하자면 다음과 같습니다.

자극 이벤트는 휴식 이벤트와 실행 조건이 같지만, 자극 이벤트 쪽이 우선도가 높으므로, 자극 이벤트가 실행될 때는 휴식 이벤트가 실행되지 않습니다.

event.solo() 함수는 비슷한 상황에서 실행되는 이벤트 중에 우선도가 높은 이벤트가 있다면 실행되지 말아야 할 이벤트에 사용하면 좋습니다.


event.only()

* 이제 주인공이 스트레스가 높아 에 걸리는 이벤트를 만들어봅시다.

* 일단 우선도를 가장 높게, 그러니까 priority = 0 값을 가장 낮게 줍니다.

* 그리고 스트레스가 3 * 플레이 일 수보다 높으면 병 이벤트를 발생시키도록 하겠습니다(기존에 적었던 병 상태 발병 공식은 무시하기로 했습니다.. -.-;).

* 남은 건 이 이벤트보다 우선도가 낮은(priority 값이 높은) 다른 이벤트는 모두 발생하지 않도록 설정하는 겁니다. event.only()를 적어줍시다.



오로지 이 상황에서는 이 이벤트만 튀어나와야 한다! 하는 이벤트에 사용해주도록 합시다.


event.happened(*이벤트) 와 event.depends(*이벤트) 그리고 call events_end_day


* 이번에 만들어볼 이벤트는 릴뤡스 입니다. 이 이벤트는 병 걸린 이벤트를 반드시 봐야지만 다음날 발생하도록 만들어줘야 합니다.
event.depends(*이벤트) 함수를 사용하면 이것을 가능하게 할 수 있습니다.


그 전에, 이 event.depends()를 사용하면서 특정 이벤트가 하루 전에 발생했다는 걸 인식시키려면 하루 단위의 스케쥴이 모두 완료된 지점에 다음과 같은 명령어를 적어줘야 합니다.



call events_end_day 를 사용하면, 예를 들면 첫째 날에 a 라는 이벤트가 발생한 경우 events_excuted_yesterday 라는 변수에 이 이벤트가 실행되었다는 것을 저장하고, 둘째날 진행으로 넘어가게 됩니다.

그러니까 event.depends(*이벤트) 를 사용하게 되면, 이 함수는 이벤트에 적은 이벤트를 events_excuted_yesterday 에서 검색할 수 있게 되는 겁니다. 이벤트를 발견했다면 event.denpends()가 사용된 이벤트를 실행시키게 됩니다.

event.happened(*이벤트) event.depends()와 비슷하지만 이는 게임 중에 어느 때라도 이벤트가 발생했다면 event.happened() 가 적힌 이벤트를 실행한다는 것이 다른 점입니다.


event.random(확률)

 * 일정한 확률에 따라 이벤트를 발생시킬 수 있도록 해주는 함수입니다. 입력하는 값은 부동소수점값(소수점 찍힌 숫자)이어야 합니다. 어려운 점은 없다고 생각해서 자세한 예는 생략하겠습니다.

* 이 함수를 이용하면 능력치값을 계산해서 일반 스탯 획득의 성공/실패를 가를 수 있을 겁니다. 프린세스 메이커에서 능력치에 따라 알바/학습의 성공/실패가 갈라졌었죠. 그런 걸 얘기하는 겁니다.


event.choose_one(group, group_count = 1)


* 이번에는 마인드 컨트롤을 하면 등장하는 이벤트 두 가지를 만들어보겠습니다.

* 한 이벤트는 보통의 이벤트이지만, 낮은 확률로 마인드 컨트롤을 하다가 잠을 자버리는 -0- 이벤트가 발생하도록 만들겁니다.

* 일단 새 이벤트를 하나 더 만듭니다.

* 그 다음 이 두 이벤트를 하나의 그룹으로 묶어줍니다. 이 그룹으로 묶는 작업을 위해 event.choose_one()을 사용합시다.

이렇게 하면 두 이벤트가 "마컨" 이라는 하나의 그룹으로 묶이게 된 겁니다. 이제 마인드 컨트롤 스케쥴을 실행할 때마다 자동으로 저 두 이벤트 중 하나가 선택되어 실행될 겁니다.

마인드 컨트롤을 하다가 낮잠을 자는 이벤트는 확률이 일반 마컨 스케쥴보다 낮아야 합니다. group_count 로 잠 자는 이벤트에 낮은 숫자를, 일반 이벤트에는 높은 숫자를 지정해줍시다.

(위의 스크립트에서는 확인용으로 m_control_sleep 이벤트의 group_count 를 높게 줬습니다)

group_count 는 큰 값이 확률이 높고 적은 값이 확률이 적습니다.

이전 글에서도 적었지만, event()에는 위에 열거한 event.어쩌구 들을 전부 혼합해서 사용할 수도 있습니다. 이벤트의 성격에 맞게 각각 조합해서 사용한다면 보다 복잡한 조건에서 발생하는 이벤트도 만들 수 있습니다.

네 끝입니다..) 렌파이로 육성 시뮬레이션을 만들 때 필요한 지식은 설명해드린 것이 전부이고, 앞으론 알게 된 기능을 응용해 만드는 일만 남았습니다. 모쪼록 재미나게 게임 만드시길.