> For the complete documentation index, see [llms.txt](https://thingsflow.gitbook.io/studio-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thingsflow.gitbook.io/studio-guide/advancedfunctions/undefined.md).

# 고급 수식 : 사칙연산, 랜덤, 비교 등

여기까지 터득한 고수 중의 고수인 작가님들, 반갑습니다🥰

혹시 속성값을 설정하시면서, <mark style="color:purple;">**`[고급 수식]`**</mark> 이라는 부분이 궁금하진 않으셨나요?

해당 기능은 아래 몇 가지 궁금증 및 필요성을 반영할 수 있도록 만들어진 기능입니다.

* “조건으로 분기”를 하면서, “속성값이 30 이상, 80 이하”인 분기를 만들 수는 없을까요?
* 수치를 명확히 비교하지 않고, “A 속성값보다 B 속성값의 크기가 클 때(혹은 작을 때)” 이동하는 분기를 만들고 싶어요!
* 어떤 선택지를 눌렀을 때, 속성값이 절반(-50%) 깎였으면 좋겠는데…!

자 그럼, 이 모든 궁금증을 반영할 수 있는 \[고급 수식] !

하나씩 차근차근 알아볼까요?

***

고급 수식은 \[선택지로 분기] 안에서도, \[속성값 저장] 안에서도 설정할 수 있습니다. 아래 이미지를 참고하여 설정해보세요!

<figure><img src="/files/CtR156tVJUzKDF1Ftmkj" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/3tWbnftTVRuA0i5nK0w5" alt=""><figcaption></figcaption></figure>

***

### \[사칙연산 넣어보기]

먼저, 가장 기본적인 <mark style="color:purple;">**`사칙연산`**</mark>입니다.

아주 간단한데요.

* 더하기 (+)
* 빼기 (-)
* 곱하기 (\*)
* 나누기 (/)

❶ "**속성값에서 3을 곱하고 싶다**!" 라고 한다면, 원하는 속성값을 선택하고 왼쪽 옵션에서 고급수식을 선택 후

<mark style="color:purple;">**`[속성:속성 이름]*3`**</mark>**&#x20;의 형태로 작성합니다.**

<figure><img src="/files/y4umg2kq40jdTZ6YnrQv" alt=""><figcaption></figcaption></figure>

❷ 아래 <mark style="color:green;">✔️유효한 수식입니다.</mark> 라는 문구가 뜬다면 제대로 설정하셨습니다.😊

❸ 스튜디오 스크립트 내에는 이렇게 노출되네요.

<figure><img src="/files/l30xqm58Q91JrhGM3oDk" alt=""><figcaption></figcaption></figure>

**❹ 더하기, 빼기, 나누기**도 위 방법과 마찬가지에요.

또, ***3\*(2+5)*** 와 같은 복합적인 연산도 가능합니다.

즉, <mark style="color:purple;">**`[속성:속성 이름] 사칙연산 기호(+,-,/,*) 숫자`**</mark> 로 작성을 해주시면 된답니다.

예시에서는 \[속성값 저장]을 활용했지만, \[선택지에서 분기]에서도 동일한 방법으로 해주시면 됩니다!

***

### \[랜덤 값 넣어보기]

랜덤 값이란 말 그대로, 플레이어가 해당 지점을 지날 때 정해진 값 중 어떤 것이 결정될 지 모르도록 설정하는 기능입니다.

이 기능을 잘 활용한다면,

* TRPG 게임처럼 초반 플레이어의 스탯을 정한다거나 \
  (ex. 판타지에서 내게 주어지는 능력 수치)
* 가위바위보/주사위 던지기 같은 랜덤 게임으로 어떤 인물과 어떤 데이트를 하게 될지

등등의 다양하고 재미있는 전개가 가능할 거예요.

너무 복잡할 것 같다고요? 방식은 생각보다 간단합니다.

❶ \[고급수식] 옵션을 선택 후, 수식을 적는 칸에 아래와 같이 작성해줍니다.

<mark style="color:purple;">**`Rand(수치1, 수치2)`**</mark>

이 때, 수치1 과 수치2는 랜덤으로 줄 숫자의 영역입니다.

<figure><img src="/files/7cYmiEl5pu3PSzWNXGqE" alt=""><figcaption></figcaption></figure>

위 예시처럼 **Rand(1,10)**&#xC73C;로 쓴다면, **1부터 10까지의 수치 중 하나가 랜덤으로 플레이어에게 배정**된다는 의미에요!

❷ 스튜디오 스크립트 내에는 이렇게 노출되네요.

<figure><img src="/files/kAjKLr6PGt4RgwbD8lPX" alt=""><figcaption></figcaption></figure>

추가로, 랜덤 값을 주었다면 인터랙티비티를 위해 \
**플레이어가 어떤 수치를 얼만큼 얻었는지 알게 할 필요**가 있습니다.

따라서, **`{{속성:속성 이름}}`** 이라는 문법을 활용해, 랜덤으로 어느정도의 속성값을 얻었는지 확인시켜주세요😊

(이전에 한번 다뤘었죠! 이렇게 작성해주시면, 실제 플레이에선 플레이어가 현재까지 얻은 누적 속성값이 뜬답니다!)

***

### **\[조건 수식] - AND와 OR**

❶ 특정 속성값 <mark style="color:purple;">**이상, 이하**</mark> 일 경우 - <mark style="color:purple;">**`AND`**</mark> 조건

특정 속성값을 일정 수치 이상**이고,** 이하일 때를 설정하고 싶다면 아래와 같이 작성합니다.

<mark style="color:purple;">**`[속성:속성이름]>= 수치1 AND [속성:속성이름]<= 수치2`**</mark>

가령, **추리력**이라는 속성이 5 이상, 10 이하일 때라면

\[속성:추리력] >= 5 AND \[속성:추리력] <= 10 이 되겠죠?

<figure><img src="/files/xxsc4no2NK6EcT3n8BCk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6fxtWS0eXcn0qLrhDetH" alt=""><figcaption></figcaption></figure>

❷ 조건 A <mark style="color:purple;">**이거나, 혹은**</mark> 조건 B일 경우 - <mark style="color:purple;">**`OR`**</mark> 조건

각 개별의 아이템 중 하나만 가지고 있어도 루트를 진입할 수 있도록 만들고 싶다면 아래와 같이 작성합니다.

<mark style="color:purple;">**`[아이템:아이템 이름1]≥ 수치1 AND [아이템:아이템 이름2]≤ 수치2`**</mark>

가령, 총이라는 아이템을 1개 가지고 있거나, 칼이라는 아이템을 1개 가지고 있다면 죽음으로 이어지지 않는 루트를 만들고 싶다면

\[아이템:총] => 1 AND \[아이템:칼] >= 1 이 되겠죠?

<figure><img src="/files/CgdhAlPQrIRcWkuoQvoM" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/i6BSs5OT0iUVOzNTJWg2" alt=""><figcaption></figcaption></figure>

❸ A 속성값과 B 속성값의 **단순 크기 비교** - <mark style="color:purple;">**`>`**</mark> , <mark style="color:purple;">**`<`**</mark> , <mark style="color:purple;">**`==`**</mark>

속성값을 정확한 수치로 나누지 않고, 단순 크기만을 비교하고 싶을 때는 어떤 방법을 활용하면 좋을까요?

아래와 같이 직관적으로 생각해주시면 됩니다.

<mark style="color:purple;">**`[속성:A] < [속성:B]`**</mark> / <mark style="color:purple;">**`[속성:A] < [속성:B]`**</mark> / <mark style="color:purple;">**`[속성:A] == [속성:B]`**</mark>

가령, 속성 최애의 호감도와 속성 차애의 호감도를 활용해 예를 한 번 들어보도록 하겠습니다.

* \[속성:최애의 호감도] **>** \[속성:차애의 호감도] ⇒ 최애와 사랑이 이어지는 해피엔딩
* \[속성:최애의 호감도] **<** \[속성:차애의 호감도] ⇒ 차애와 사랑이 이어지는 해피엔딩
* \[속성:최애의 호감도] **==** \[속성:차애의 호감도] ⇒ 둘 모두와 이어지지 못하는 노말 엔딩

***

<mark style="color:yellow;">**⚠️**</mark>**&#x20;**<mark style="color:red;">**여기서 주의할 점!**</mark>**&#x20;**<mark style="color:yellow;">**⚠️**</mark>

* 만일 속성값의 이름이 변경 되더라도 **처음 입력했던 속성값의 이름으로 설정해야 합니다.**

  시스템 상, 처음 입력했던 속성값이 이미 저장 되었기 때문에 **변경된 이름으로 속성값 문법을 작성한다면 적용되지 않아요!**

  띄어쓰기가 있다면 띄어쓰기까지 동일하게 입력해주어야 합니다.
* **동일하다(=)**&#xB85C; 설정하고 싶을 경우, <mark style="color:red;">**‘=’이 아닌 ‘= =’로**</mark> 작성해주세요. 등호를 하나만 작성할 경우에는 수식에 오류가 발생합니다.
* 수식 조건인 영어 단어를 입력할 때 꼭 대문자로 작성하지 않아도 괜찮습니다. 소문자로 입력해도, 설정이 되면 시스템 상 바로 대문자로 변환되어요.

***

자, 총 3가지의 방법과 주의사항까지 알아 보았는데요.

작품 작성이 처음이시라면 모든 기능이 다소 어렵게 느껴질 수 있습니다.😅

하지만 도움말과 함께 차근차근 하나씩 설정해 보신다면 금방 스튜디오 사용이 점차 익숙해지실 거예요!

한 눈에 정리해서 보고 싶다고 생각하신 작가님들을 위해, 가장 기본적인 수식 규칙을 다시 한 번 총정리 해보겠습니다.

***

### \[속성값 넣기 기본 규칙]

* 속성값 저장, 조건으로 분기 등에서 속성값을 지칭할 때, **속성값과 아이템값은 \[속성:속성값명] \[아이템:아이템명] 으로 작성**한다.

* **사칙연산**(**`+,-,*,/`**)과 **제곱수**(**`^`**), **소괄호에 의한 연산 우선순위**(**`3*(2+1)`**) 가 지원된다.

* **논리연산, 즉 기본적인 수식 규칙**은 아래와 같다.

  * A **`>`** B → A가 B**보다 크다**.
  * A **`<`** B → B가 A**보다 크다**.
  * A **`>=`** B → A가 B보다 **크거나 같다**.
  * A **`<=`** B → B가 A보다 **크거나 같다**.
  * A **`==`** B → A와 B가 **같다**. (=B가 A와 같다.)
  * A **`<>`** B → A는 B가 **아니다**. (=B는 A가 아니다.)

* **AND, OR** 조건 연산을 지원한다.
  * 조건 A **`and`** 조건 B → 조건 A **이면서(그리고)** 조건 B일 경우
    * ex. \[속성:호감도]>20 AND \[속성:호감도]<60
  * 조건 A **`or`** 조건 B → 조건 A **이거나(혹은)** 조건 B일 경우

    * ex. \[아이템:반지] >= 2 OR \[아이템:목걸이] >= 1

* **랜덤** 기능을 지원한다.
  * **`Rand(수치1, 수치2)`** → 수치1과 수치2 사이의 임의의 값 도출.
    * ex. Rand(10, 30) → 10 \~ 30 중 랜덤 값
