Stone Story RPG Guide

StoneScript Ver. 2.8.5(정식) 한글 가이드 - Beta추가 for Stone Story RPG

StoneScript Ver. 2.8.5(정식) 한글 가이드 – Beta추가

Overview

StoneScript 영문 가이드를 한글로 번역하였습니다.오역, 오탈자가 있을 수 있습니다. ^^ _ ______________________ _
,:´ ____ __.—,. `.
:.! ___________________`–`´__
:’ ————————–.
‘:’ · ·:. :’· :.:· \
‘:’ :·’ :·:. \
‘:’ · .: ·:: ‘.:. ‘:’··:. \
‘:’ · :.. \
‘:’ · :·: ..’: :·:. ·:: ‘. \
‘:’ __________________________\
‘:’ ` . . )
‘:’ . . . . . . . ‘ . . . . . .;
`·.;,;,;,;,;,;,;,;,;,;,;,;,;,;,:’
장비 선택을 자동화하기 위해 정신의 돌에서 사용됩니다. Stonescript는 Stone Story RPG에서 매우 간단하지만 강력한 언어입니다.도움이 필요합니까? 스크립트 공동 작업을 원하십니까? Discord[discordapp.com]에 방문하세요.좋은 스크립트의 목표는 게임 상태가 변함에 따라 최고의 아이템을 장착하는 것입니다. 체력이 낮으면 물약을 자동으로 사용하는 것처럼 간단하거나 전투가 인간 수준으로 최적화 된 경우에는 복잡 할 수 있습니다.

1. 예제

// 바위 고원에서 삽을 장착한다. // 공포의 동굴에서는 갈고랑쇠(Grppling Hook)와 // 7성 전쟁의 망치(War Hammer) 사용하는 // 보스를제외하고는 작업용 밸트(loadout) 1을 // 창착합니다. // 귀신들린 회랑(Haunted Halls)에서는 왼손에는 // 독(Posion), 오른손에는 용력(Vigor) 두개의 // 마법봉(Wand)을 지정하여 사용합니다. 그러나, // 장소(지역) 난위도가 5성 이상인 경우에는 +13인 // 용력(Vigor)의 돌 마법봉을 사용합니다. // 체력이 10이하로 떨어지면 물약을 // 사용합니다. ?loc=rocky equip shovel ?loc=cave loadout 1 ?foe=bolesh equip grap equip hammer *7 D ?loc=halls equipL poison wand equipR vigor wand ?loc.stars > 5 equip vigor staff +13 ?hp < 10 activate potion

2. 기본

명령어
설명
?
논리적 조건을 평가합니다.
true이면 들여쓰기된 줄들을 실행합니다(if).
?loc = caves loadout 1
:
‘?’에서 논리적 조건이 false일때 들여쓰기된 줄들을 실행합니다.(else).
?loc = caves loadout 1 : loadout 2
😕
논리적 조건이 false일때,
추가 논리적 조건이 필요할때 사용합니다.(else-if).
?loc = caves loadout 1 :?loc = deadwood loadout 2 : loadout 3
//
주석. 스크립트가 실행될 때
‘//’의 오른쪽의 모든 텍스트는 실행되지 않습니다.
?loc = caves loadout 1 //공포의 계곡에서 작업용 밸트(loadout) 1을 장착한다
^
이전 줄에서 이어쓰기.
?loc=caves | ^loc = mine equip repeating //위 내용과 같습니다: ?loc=caves|loc=mine equip repeating

3. 게임 상태

이 질문들은 무슨 일이 일어나고 있는지, 플레이어 앞에 있는것이 무엇인지를 알려줍니다.

명령어
설명
?loc
현재 장소(지역) 이름
?loc = caves loadout 1
현재 장소(지역)의 현지화된 이름(선택한 언어).
var name = “” name = loc.name >Exploring @name@
?loc.stars
현재 장소(지역)의 난이도.
?loc = caves ?loc.stars=4 loadout 1 ?loc.stars=5 loadout 2
?loc.begin
게임 시뮬레이션이 실행되기 전에 time=0 일때 첫 번째
프레임에서만 적용됩니다.
우로보로스 루프 후에는 true가 아닙니다.
변수 초기화에 유용합니다.
?loc.begin var i = 0 ?loc = caves i = -100
?loc.loop
우로보로스 루프 후 실행의 첫번째 프레임일때 참입니다.
var loopCount = 0 ?loc.loop loopCount++
?foe
플레이어가 목표로하는 현재 적.
?foe = boo equip vigor staff
플레이어가 목표로하는 적의 현지화된 이름(선택한 언어).
?foe.distance
플레이어가 목표로하는 적 사이의 거리.
?foe.count
40유닛 내의 적의 수.
?foe.hp
플레이어가 목표로하는 적의 현재 체력 포인트.
?foe.maxhp
플레이어가 목표로하는 적의 최대 체력 포인트.
?foe.armor
플레이어가 목표로하는 적의 현재 방어 포인트.
?foe.maxarmor
플레이어가 목표로하는 적의 최대 방어 포인트.
?foe.debuffs.count
목표로하는 적의 디버프 수.
?hp
플레이어의 현재 체력 포인트.
?maxhp
플레이어의 최대 체력 포인트.
?armor
플레이어의 현재 방어 포인트. 소수점 이하 버림.
// 만약 armor이 2.4이면 ?armor // 이값은 정수부분 2입니다.
?armor.f
플레이어의 현재 방어 포인트. 소수점 이하 값.
// 만약 armor이 2.4이면 ?armor.f // 이값은 소숫값 4입니다.
?maxarmor
플레이어의 최대 방어 포인트.
?pos.x
플레이어의 현재 X 위치.
?pos.y
플레이어의 현재 Y 위치.
?pos.z
플레이어의 현재 Z 위치.
?debuffs.count
플레이어의 현재 디버프 수.
?harvest
다음 벌목또는 채석가능 나무나 돌이이 있으면 true.
?harvest=Boulder equip shovel
?harvest.distance
플레이어와 가장 가까운 벌목이나 채석 가능한 물체
사이의 거리.
?loc=Rocky & harvest.distance < 7 equip shovel
?pickup
플레이어가 목표로 하는 현재 유실물(플레이어가 죽을 때
떨어트리는 물건).
?pickup.distance
플레이어와 목표로하는 유실물(플레이어가 죽을 때
떨어트리는 물건) 사이의 거리.
?time
현재 장소(지역)의 프레임 번호.
?totaltime
보스 하위 장소(지역)의 경우 누적 된 장소(지역)의
현재 프레임 번호.
?face
플레이어의 현재 얼굴 표정.
?face =( ^^)
?ai.enabled
AI가 켜져 있으면 True, AI가 꺼져 있으면 False
(예. during a cinematic moment).
?ai.paused
보물이 떨어지는 것을 기다릴 때와 같이 AI가
일시적으로 정지되었을 때 True
?ai.idle
공격과 같은 작업이 완료 될 때까지 기다리는
동안 플레이어가 할 일이 없으면 True.
?ai.walking
플레이어가 이동하면 True.
?key
사용자 게임 입력 상태.
다음은 현재 입력 값을 출력합니다:

>@key@
?rng
0에서 9999 사이의 난수를 반환합니다.
?rng < 5000 >Heads! : >Tails!

이 예는 5에서 24 사이의 난수를 생성합니다:

var min = 5 var max = 24 var n = 0 n = min + rng % (max – min + 1)
?screen.w
화면 전체 ASCII 그리드 너비.
var sw = screen.w >Screen width = @sw@
?screen.h
화면 전체 ASCII 그리드 높이.
var sh = screen.h >Screen height = @sh@

4. 명령어

게임에 무언가를 하도록 지시합니다.

명령어
설명
activate (ability)
아이템 능력을 사용합니다.
(ability)에 사용할 수 있는 값:
potion, P, left, L, right, R.
activate R

(Hatchet과 같이 오른쪽에 장착된
아이템의 능력을 사용합니다)

equip (str)
아이템을 장착합니다.
(str)는 7개로 제한됩니다.
equip vigor crossbow *8 +5
equipL (str)
주어진 기준에 가장 적합한 아이템을
왼손에 장착합니다.
equipL poison sword
equipR (str)
주어진 기준에 가장 적합한 아이템을
오른손에 장착합니다.
equipR vigor shield
loadout (n)
작업용 밸트에 창착된 번호를
무기를 변경합니다.
?loc = caves loadout 1 ?loc = deadwood loadout 2
> (str)
화면 상단에 문자열을 출력합니다.
>Hello World!
> @varName@
변수에 입력된 문자열 값을 출력합니다.
한 번의 출력에 여러 변수 값을 출력할
수 있습니다. 변수 이름을 @로 묶어
삽입합니다.
다음 예제는 현재 목표로 하는 적에 대한
정보를 출력합니다:

var foeInfo = “” foeInfo = foe >FOE = @foeInfo@
>(abcd
플레이어의 커스텀 얼굴 표정을
보여줍니다.
>( OwO
>oX,Y,[#rrggbb,](str)
플레이어의 위치와 관련된 고급 출력.
XY는 좌표 오프셋입니다.
#rrggbb는 16진 표기법의 텍스트
색상입니다.
#white, #cyan, #yellow, #green, #blue
및 #red와 같은 상수를 사용하여
색상을 설정할 수 있습니다.
#rainFF을 이용하여 무기개 색상으로
출력할 수 있으며, 마지막 두 문자는
밝기를 나타냅니다.
다음은 플레이어의 위치를 기준으로
왼쪽으로 6과 아래쪽 3 지점에
“Let’s go!”를 출력합니다:

>o-6,3,#ff0000,Let’s go!
>hX,Y,[#rrggbb,](str)
“>o”와 비슷하지만,
Big Head와 동일한 레이어에 그립니다.
모자와 같은 액세서리를 그리기에
좋습니다.
다음은 플레이어에 노란 모자를 그립니다.
큰 머리 필요:

>h-2,-3,#yellow,ascii ##_ #| | _|_|_ asciiend
>`X,Y,[#rrggbb,](str)
화면의 왼쪽 상단을 기준으로 한
고급 출력.
다음은 좌표와 색상 변수에 설정한 값을
이용하여 “Hello World!”를 출력합니다:

var posX = 10 var posY = 5 var color = rainE1 >`@posX@,@posY@,#@color@,Hello World!
>cX,Y,[#rrggbb,](str)
화면 중앙을 기준으로 한 고급 출력.
“>`”와 비슷합니다. 이 모든 색상은
선택 사항입니다.
이 예는 색상이 선택적인 방법이며
기본값은 흰색입니다:

>c0,0,Hello World!
>fX,Y,[#rrggbb,](str)
목표로 하는 적의 머리 위치를
기준으로 한 고급 출력.
다음은 목표로 하는 적에게 빨간
십자선을 그립니다:

>f-2,0,#ff0000, ^##!n ^-#·#-n ^##¡
var (variable)
수학, 논리 및 문자열 연산에 사용할 변수를
선언합니다.
var message = Hello World! >@message@
func (function)
호출 할 수 있는 함수를 선언합니다.
func Print(message) >@message@ Print(Hello World!)
for v = a..b
Beta 2.9.1 추가
변수 ‘v’를 값 ‘a’에서 값 ‘b’까지 반복하는
루프를 작성합니다. 루프 범위 내에
있는 코드를 여러번 실행합니다.
var a a = 0 for i = 1..5 a = a + i >a = @a@
import (script)
외부 스크립트의 단일 복사본을
로드하고 실행합니다.
이 예는 (저장파일 폴더)/Stonescript/fishing.txt
위치한 낚시 미니 게임을 가져 옵니다.

import fishing
new (script)
‘import’와 거의 같은 기능으로 외부
스크립트를 로드하고 실행합니다.
그러나 ‘new’로 로드된 오브젝트는 각각 개별적인
복사본이며 스크립트 본문에서는 한번만
실행됩니다.
이 예는 벡터 객체를 생성하고 인쇄합니다:

var v = new Components/Vector v.Init(10, 5) >Vector = @v@
disable hud
사용자 인터페이스 요소를 숨기고
비활성화합니다:
자원, 체력, 능력 버튼, 일시 정지 버튼.
enable hud
“disable hud”명령으로 숨겨진 모든
사용자 인터페이스 요소를 활성화합니다.
disable loadout print
작업용 밸트(로드 아웃)에서 장비를
불러올 때 표시되는 메시지를 숨깁니다.
enable loadout print
작업용 밸트(로드 아웃)메시지를 다시 출력합니다.
disable player
플레이어를 숨깁니다.
전투에는 영향을 미치지 않으며,
이것은 단지 꾸미기입니다.
enable player
“disable player” 명령으로 플레이어가
숨겨진 경우 플레이어를 보이게
합니다.
play (sound)
음향 효과를 재생합니다.
?key = primary play buy

5. 비교 연산자

게임 상태와 함께 사용하는 비교 기호

연산자
설명
=
같거나 문자열에 포함 된 값을 비교.
?hp = maxhp loadout 2

!
같지 않거나 문자열에 포함되지 않은 값을 비교.
?foe ! poison equipL sword

&
논리 AND 연산자.
?loc=caves & foe=boss

|
논리 OR 연산자.
‘&’‘|’ 하나의 복잡한 표현으로 혼합할 수 있으며, 모든 ‘&’
먼저 작동합니다.
?foe=slow | foe.count>3 activate potion

>
보다 큽니다.
장소(지역)의 난이도, 적의 수, 체력 등과 함께 사용할
수 있습니다.
?foe.count > 10 equip bardiche

<
보다 작다
?hp < 6 activate potion
>=
크거나 같음 비교. ‘>’와 ‘=’를 조합한 단일 비교.
다음 두개의 예는 동일합니다:

?loc.stars >= 6 equipR vigor shield ?loc.stars > 6 | loc.stars = 6 equipR vigor shield
<=
작거나 같음 비교. ‘<‘와 ‘=’를 조합한 단일 비교.
?hp <= 6 activate potion

6. 변수

변수는 나중에 사용하기 위해 값을 저장하는 방법입니다. 키워드 ‘var’을 사용하여 새 변수를 선언합니다.

예:

var myVar = 10

(myVar는 변수의 이름이며 값은 10으로 초기화 됩니다)

myVar = myVar + 5

(현재 myVar값은 15)

var secondVar = 3 myVar = myVar – secondVar

(수학 연산에서 많은 변수를 결합 할 수 있습니다. 현재 myVar값은 12)

var’가 처음 실행 될때, 변수가 선언되고 한 번만 초기화됩니다.

var i = 0 i++ >i = @i@

이 예에서 변수’i’가 선언되고 값을 0으로 시직합니다. 각 프레임이 실행되는 동안 ‘i’의 값이 1씩 증가한 다음 화면에 출력합니다.

장소(지역)의 나간후 다시 실행을 시작하면 변수는 초기값으로 재설정됩니다. 우로보로스가 반복 될 때 재설정되지 않습니다.

문자열 변수는 선택적으로 따옴표로 선언할 수 있습니다. 특수기호화 후행 공백이 허용됩니다.

var a = 10 var b = 5 var myVar = a + ” x ” + b + ” = ” + (a * b) >@myVar@

(이 예는 ‘+’연산자로 문자열을 합치는 방법을 보여줍니다)

외부 스크립트의 변수는 해당 외부 스크립트에 포함되며 해당 변수명은 다른 외부 스크립트의 변수 또는 함수와 충돌하지 않습니다.

7. 수학 연산자

연산자는 숫자를 수정합니다. 변수와 함께 사용하거나 게임 상태 표현에 직접 사용할 수 있습니다.

연산자
설명
+
두 숫자 또는 변수를 더합니다.
var a = 2 + 3

(a의 값은 5)

두 숫자 또는 변수를 서로 뺍니다.
?hp < maxhp – 5 equip vigor sword dL
*
두 숫자 또는 변수를 곱합니다.
var a = 2 var b = 5 a = a * b

(a의 값은 10)

/
하나의 숫자 또는 변수를 다른 숫자로 나눕니다. 결과는 소수점이하 버림된 값입니다
var a = 8 a = a / 4

(a의 값은 2)

++
변수의 값을 증가시킵니다.
var a = 3 a++

(a의 값은 4)

변수의 값을 차감시킵니다.
var a = 3 a–

(a의 값은 2)

%
나머지. 한 숫자를 다른 숫자로 나눈 나머지값.
var a = 5 % 4

(a의 값은 1)

?time % 8 < 4 > O) ?time % 8 > 3 > (O/

(애니메이션 이모티콘을 그립니다)

( )
괄호를 사용하여 연산 작업의 우선 순위를 지정할 수 있습니다.
var a = 2 * (3 – 1)

(a의 값은 4)

!
부정. 부울식 앞에 사용될때 값을 반전시킵니다.
? !ai.enabled >AI가 활성화 되어있지 않습니다.

8. 함수

사용자 정의 함수는 복잡한 스크립트를 기능별로 정의하여 간단하게 사용할 수 있습니다. 스크립트를 쉽게 읽고 반복 할 수 있습니다. 함수가 선언되면 그 내용은 바로 실행되지 않습니다. 대신, 선언된 한수 내부 스크립트는 함수가 호출될 때 실행됩니다.

이 예는 각 프레임마다 1씩 증가하는 카운터를 만듭니다. 사용자 정의 입력 키를 누르면 ResetCounter()가 호출되고 카운터 값을 0으로 초기화합니다:

var count = 0 count++ >Counter = @count@ func ResetCounter() count = 0 ?key=begin ResetCounter()

함수는 정의된 스크립트의 결과를 반환할 수 있습니다. 이 예는 기본 장소(지역; 보스가 아닌 영역)의 지속 시간을 계산하는 간단한 함수를 선언합니다:

func NonBossDuration() return totalTime – time var duration = 0 duration = NonBossDuration() >Time was: @duration@

함수는 임의의 수인 인자/매개 변수를 허용하므로 임의의 입력값에서 작동하는 기능을 구현할 수 있습니다. 여기서는 범위 내에서 난수를 생생하는 유틸리티 함수를 선언한 다음 이 함수를 사용하여 5와 10 사이의 난수를 생성합니다:

func RandomRange(min, max) ?min >= max return min return min + rng % (max – min + 1) var randomValue = 0 randomValue = RandomRange(5, 10) >RNG: @randomValue@

접두사 ‘this’는 외부 스크립트에 속하는 변수를 참조할 때 함수 내부에서 사용할 수 있습니다. ‘this’사용은 선택 사항이며, 스크립트 변수는 함수내에서 접두사가 없이 사용할 수 있습니다. 그러나 다음 예제에서는 변수’a’는 함수의 내부와 외부에 모두 나타나므로 외부 변수는’this.a’로, 내부 변수는 ‘a’로 사용됩니다:

var a = 1 func TestScope(a) >Script var = @this.a@, function var = @a@ TestScope(3)

함수가 다른 함수 또는 자신을 호출하면 실행 스택이 어플리케이션이 충돌 할때까지 생성하여 크기가 커질 수 있습니다. 컴퓨터 리소스를 보호하기 위해 Stonescript의 스택을 제한하며, 1024를 초과하면 오류가 발생합니다.

9. Stonescript 자체 함수

스크립트는 직접 함수를 정의할 수 있지만, Stonescript는 명령와 유사하게 작동하는 사전에 정의된 자체 함수들을 제공합니다. 그러나 주제별로 더 명확하게 그룹화되어 있으며 매개 변수를 사용하고 때로는 값을 리턴할 수 있다는 점이 다릅니다.

함수
반환값
설명
draw.Bg(x, y, color)
없음
특정 화면 위치에 배경색을 설정합니다.
draw.Bg(5, 4, #red)
draw.Bg(x, y, color, w, h)
없음
화면에서 직사각형 영역에 배경색을
설정합니다.
draw.Bg(5, 4, #cyan, 10, 6)
draw.Box(x, y, w, h, color, style)
없음
Beta 2.9.1 추가
지정된 위치와 크기로 직사각형 모양을
그립니다. 사각형의 테두리는 색상과
스타일 번호로 정의됩니다.
스타일 번호가 음수이면 사각형 내
배경이 투명해집니다.
주의사항 – 항상 상자 위에 고급 출력을
하여야 합니다.
왼쪽/오른쪽 방향키를 눌러
다양한 스타일을 확인할
수 있습니다

var style = 1 ?key = leftBegin style– ?key = rightBegin style++ draw.Box(10, 5, 30, 15, #333333, style) >`12,6,#ffffff,Style = @style@ >`12,8,#888888,Press Left/Rightnto change style
draw.Clear()
없음
전체 화면을 지웁니다.
draw.GetSymbol(x, y)
문자열
화면 위치(x, y)의 글리프를
반환합니다.
이 예는 화면 좌표를 선택하고 왼쪽 위에
기호를 찾아 그립니다.
플레이어가 선택값은 ‘[ ]’ 안으로 이동할
수 있습니다:

var s var x = 20 var y = 10 var drawX ?key=leftBegin x– ?key=rightBegin x++ ?key=upBegin y– ?key=downBegin y++ s = draw.GetSymbol(x, y) >`0,1,Symbol = @s@ drawX = x – 1 >`@drawX@,@y@,[#]
draw.Player()
없음
스크립트의 특정 지점에서 무든 장비와
애드온과 함께 플레이어 캐릭터를
그립니다.
int.Parse(str)
정수값
숫자 문자열을 정수값으로 변환합니다.
주어진 문자열이 숫자가 아닌 겅우
오류가 발생합니다.
var s = “999” var i = int.Parse(s) i++
loc.Leave()
없음
플레이어가 수동으로 나가기 메뉴를 누른것
처럼 런을 포기합니다.
loc.Pause()
없음
Beta 2.9.1 추가
플레이어가 일시 정지 버튼을 수동으로
누른것 처럼 게임을 일시
정지시킵니다.
math.Clamp(num, min, max)
정수값
‘min’과 ‘max’사이의 숫자를 포함
합니다.
숫자가 이 범위 안에 있으면
변경하지 않고 반환됩니다.
var number = 50 number = math.Clamp(number, 0, 10) (number는 ‘min’과 ‘max’ 사이값보다 크므로 max값 10과 같습니다)
string.Size(var)
정수값
문자열 변수를 매개변수로 사용하고 문자의
길이를 계산합니다.
var a = abc123 var size = string.Size(a) >size = @size@
string.IndexOf(var, criteria)
정수값
문자열 변수 및 찾을 문자열을 매개 변수로
사용하고 문자열 내에서 찾을 문자열의
위치를 찾습니다.
찾지 못하면 -1을 반환합니다.
var a = Hello World! var index = string.IndexOf(a, llo) (index 2와 같습니다)
string.IndexOf(var, criteria, startAt)
정수값
문자열 변수, 찾을 문자열과 검색
시작위치를 매개 변수로
사용합니다.
‘startAt’ 매개 변수로 들어 온
위치부터 찾을 문자열을
위치를 찾습니다.
찾지 못하면 -1을 반환합니다.
var a = Hello World! var index = string.IndexOf(a, llo, 4) (검색 시작 위치 4에서 시작하였기 때문에 index는 -1과 같으므로 ‘llo’를 찾을 수 없습니다)
string.Sub(var, startAt)
문자열
문자열 변수와 시작 위치를
매개 변수로 사용하여 해당
시작 위치 부터 이후
문자열을 반환합니다.
var a = Hello World! var subString = string.Sub(a, 6) >substring = @subString@ (subString은 “World!”와 같습니다)
string.Sub(var, startAt, length)
문자열
문자연 변수와 시작 위치,
반환할 문자열 길이를 매개
변수로 사용하여 시작
위치에서 시작하여 반환할
문자열 길이만큼 문자열을
반환합니다.
var a = Hello World! var subString = string.Sub(a, 6, 3) >substring = @subString@ (subString은 “Wor”와 같습니다)
Type(var)
Ver 2.9.2 (Beta)추가
문자열
변수의 유형을 평가하고
문자열 표현을 반환합니다.
가능한 유형은 ‘string’, ‘int’,
‘bool’, ‘function’, ‘object’ 및
‘null’입니다.
var a = 0 ?Type(a) = int >Variable ‘a’ is an integer.

10. 외부 스크립트 가져오기

스크립트가 모두 정신의 돌에 있을 필요가 없습니다. Stonescript는 ‘import’ 키워드를 통한 외부 파일을 불러오는것을 지원합니다. 외부 스크립트가 작동하려면 저장파일 폴더안에 /Stonescript 폴더를 생성한후 이 폴더에 확장자가 ‘.txt’야 합니다.

가장 기본적인 예는 외부 스크립트를 가져와 정신의 돌에 직접있는 것 처럼 실행하므로 다음과 핀리하게 스크립트를 구성할 수 있습니다:

import rocky import deadwood import caves import forest

스크립트를 가져오면 자체 컨테이너에 복사되어 참조로 반환됩니다. 외부 스크립트에서 선언된 변수는 분리되어 있으며 다른 외부 스크립트의 변수와 상호 작용하지 않습니다. 이 예는 출력 유틸리티 스크립트는 단순화된 서비스를 제공합니다:

// print_util.txt func LowerLeft(x, y, color, message) y = y + screen.h >`@x@,@y@,@color@,@message@ func LowerRight(x, y, color, message) x = x + screen.w y = y + screen.h >`@x@,@y@,@color@,@message@ // Main script in Mind Stone // 정신의 돌 내에 있는 메인 스크립트 var print = import print_util disable hud print.LowerLeft(0,-1,#ffffff,”Health: ” + hp)

고급 솔루션은 동일한 스크립트를 여러 번 가져올 수 있습니다. 예를 들면, 컴포넌트화 또는 객체지향 패러다임을 구현하려면 다음을 수행합니다:

// Vector.txt var x = 0 var y = 0 func init(_x, _y) x = _x y = _y func subtract(otherVect) x = x – otherVect.x y = y – otherVect.y // 정신의 돌 내에 메인 스크립트 var vectFrom = import Vector var vectTo = import Vector vectFrom.init(5, 4) vectTo.init(8, 2) vectTo.subtract(vectFrom) >x = @vectTo.x@, y = @vectTo.y@

외부 스크립트는 ‘ToString()’함수를 구현하여 고급 출력 명령에서 직접 사용할 수 있습니다:

// Vector.txt var x = 0 var y = 0 func init(_x, _y) x = _x y = _y func ToString() return “(” + x + “, ” + y + “)” // 정신의 돌 내에 메인 스크립트 var v = import Vector v.init(3,5) >Vector = @v@

하위폴더에서 외부 스크립트를 가져 올 수 있습니다:

import Games/Blackjack import Cosmetics/PetFrog import Cosmetics/Hats

‘import’와 ‘new’는 비슷하지만 중요한 차이점이 있습니다. ‘import’를 사용하면 매번 같은 객체가 반환됩니다. 여러 곳에서 동일한 스크립트를 가져 오면, 모두 동일한 객체를 사용하게 됩니다. ‘new’로 가져온 스크립트는 고유한 복사본을 만들지만, 스크립트 본문에서는 모든 프레임이 아닌 1회만 실행됩니다.

11. ASCII 아트

Stonescript에서는 스크립트에 사용자 정의 ASCII 아트를 포함시키고 고급 출력 명령을 사용하며 화면에 그릴 수 있습니다. 이를 수행하는 몇 가지 방법이 있으며 일부 특수문자는 사용할 수 있습니다:

문자
기능
설명
#
빈 공간.
투명. 그리지 않음.
n
줄 바꿈.
다음 줄에서 그리기를 계속합니다.
  • 방법 1 – 고급 출력
    이 예는 화면 왼쪽 상단에 녹색 원을 그립니다.

    >`1,0,#green, ^#.-.n ^( )n ^#`-´
  • 방법 2 – 변수
    이 예는 물고기 모양의 아트를 변수에 저장한 다음 화면 왼쪽 상단에 빨간색으로 그립니다.

    var fishSprite = “” fishSprite = ” ^###(°_##n ^#_/_ o#n ^#´ `”#” >`0,3,#red,@fishSprite@
  • 방법 3 – ascii/asciiend 블록
    이 예는 방법1, 2를 대체하기 위해 ascii 블록을 사용하는 것을 보여줍니다. ascii 블록을 사용하면 구분 행에 ^ 와 n 이 필요 없습니다. 또한 컴파일러는 “와 같은 특수 문자를 혼동하지 않아 사용할 수 있게 되었습니다.

    >`1,0,#green,ascii #.-. ( ) #`-´ asciiend var fishSprite = “” fishSprite = ascii ###(°_# #_/_ o #´ `'” asciiend >`0,3,#red,@fishSprite@

12. 루프 – beta 2.9.1 추가

루프를 사용하면 코드 섹션을 여러 번 실행할 수 있습니다. 루프를 만들려면 ‘for’키워드를 다음 형식으로 사용합니다:

for v = a..b

루프는 변수 ‘v’가 값 ‘a’에서 시작하여 값 ‘b’에 도달 할 때까지 값이 증가한 다음 루프를 종료합니다:

for i = 1..5 >`0,@i@,i = @i@

반복 변수 ‘v’‘for’이전에 선언되어서는 안되며 루프 범위에 포함됩니다. 그러나, 시작 및 종료 값 ‘a’‘b’는 루프 전에 선언될 수 있습니다:

var min = 1 var max = 4 var sum sum = 0 for j = min..max sum = sum + j >sum = @sum@

루프는 차감형태로 사용할 수 있으며 음수를 사용 할 수 있습니다:

var g g = “” for k = 5..-2 g = g + k >g = @g@

복잡한 알고리즘을 만들기 위해 루프를 서로 중첩시킬 수 있으며 수학 표현식과 함께 사용할 수 있습니다:

for x = 1..9 for y = x/2 .. x/2 + 6 >`@x@,@y@,*

루프를 중간에 중단하려면 반복 변수의 값이 범위를 벗어나도록 수정합니다:

var n n = “” for i = 1..5 ?i = 3 i = -1 n = n + i >n = @n@

13. 검색 필터

적의 정보를 평가할 때 사용됩니다.

예:

?foe = insect | foe = poison loadout 3

  • poison
  • vigor
  • aether
  • fire
  • air
  • ice
  • arachnid
  • serpent
  • insect
  • machine
  • humanoid
  • elemental
  • boss
  • spawner
  • flying
  • slow
  • ranged
  • unpushable
  • undamageable
  • magic_resist
  • magic_vulnerability
  • immune_to_stun
  • immune_to_ranged
  • immune_to_debuff_damage
  • immune_to_physical
  • *[number] 장소(지역) 또는 아이템 별 레벨
  • +[number] 아이템 마법 보너스

14. 사용자 입력

Stonescript는 게임 상태 ?key을 사용하여 플레이어가 입력한 키값을 읽을 수 있습니다. AI에 대한 다른 모드와 같은 고급 동작을 유도하는데 사용할 수 있지만, 사용자 지정 입력을 통해 Stone Story에서 새로운 것을 만들 수 있습니다.

이 예에서 @기호를 사용하여 클래식 악당 게임에서 주인공처럼 화면을 가로 질러 이동할 수 있습니다. 키 코드(leftBegin 등)는 키보드 키를 눌렀을때 발생합니다.

var x = 0 var y = 0 ?key = leftBegin x– ?x < 0 x = 0 ?key = rightBegin x++ ?key = upBegin y– ?y < 0 y = 0 ?key = downBegin y++ >`@x@,@y@,#ffffff,@
  • 사용 가능한 모든 키코드 테이블:
    Held
    Pressed
    Released
    Default PC
    left
    leftBegin
    leftEnd
    A or ←
    right
    rightBegin
    rightEnd
    D or →
    up
    upBegin
    upEnd
    W or ↑
    down
    downBegin
    downEnd
    S or ↓
    primary
    primaryBegin
    primaryEnd
    Return
    back
    backBegin
    backEnd
    X
    ability1
    ability1Begin
    ability1End
    Shift
    ability2
    ability2Begin
    ability2End
    Control
    bumpL
    bumpLBegin
    bumpLEnd
    Z
    bumpR
    bumpRBegin
    bumpREnd
    C

15. 팁

  • 비교 ‘?’의 결과로 발생하는 동작을 정의 할 때 공백(들여쓰기)이 중요합니다(범위).
  • 실행 도중에 키보드에서 ‘M’키를 눌러 스크립트를 변경할 수 있습니다.
  • 정신의 돌의 오른쪽 상단에 있는 전원 버튼은 스크립트를 켜거나 끕니다.
  • 여러 개의 장착 명령이 호출되면 마지막에 오는 것이 장착됩니다.
  • 스크립트는 초당 30회(프레임 당 한 번) 실행됩니다.
  • 다른 스크립트 실험하려면 메모장과 같은 외부 텍스트 편집기로 복사하는 것이 좋습니다.
  • Ctrl+A, Ctrl+C, Ctrl+V와 같은 일반적인 단축키를 사용할 수 있습니다.
  • 게임에서 Tab키를 누르고 있으면 게임 상태에 대한 많은 정보가 제공됩니다.
  • 텍스트에서 ‘n’을 사용하여 출력 명령을 여러 줄로 나눌 수 있습니다.

16. 기본 스크립트

import Fishing ?hp < 7 activate potion ?loc = caves equipL sword equipR shield ?foe = boss equip crossbow

17. 로드맵

  • 앞으로 추가할 기능:
    • 앱 실행간에 값을 요지하는 영구 변수 구현.
    • 낚시 미니 게임.
    • 수학관련 자체 함수 추가.
    • ?has = potion 사용 가능한 물약이 있는지 확인.
    • ?has = (item) 아이템이 장착되어 있는지 확인.
    • ?hasL = (item) 아이템이 왼쪽에 장작되어 있는지 확인.
    • ?hasR = (item) 아이템이 오른쪽에 장작되어 있는지 확인.
    • Particle emissions(입자 방출??)
    • brew [resources] 장소(지역)의 시작 부분에 물약을 만들기. E.g.: brew wood stone.
    • 배열/리스트.
    • 루프.
    • ?foe.level – 목표로하는 적의 레벨/난이도.
    • ?foe.state (cast,perf,cooldown) – 목표로 하는 적의 현재 공격 상태.
    • ?foe.statetime – 적을 공격한 현재 상태의 경과된 프레임.
    • equipF (str) – Faerie에게 아이템을 장착.
    • foes – 40유닛 내의 적 목록.

부록A – 음향 효과

Stonescript는 사용자 지정 논리에 따라 게임에서 사운드 효과를 재생할 수 있습니다.

이 예는 플레이어가 체력이 떨어질때 마다 ‘unequip’효과음이 재성됩니다.

var lasthp = hp ?hp < lasthp play unequip lasthp = hp

대부분의 사운드는 무작위나 순차적으로 변경할 수 있습니다. 동일한 사운드가 단일 프레임에서 두 번 이상 재생되면 무시됩니다. 초당 5 개 이상의 사운드가 재생되면 스로틀됩니다.

Stone Story RPG에서 사용할 수있는 전체 사운드 목록은 다음과 같습니다:

  • buy
  • click
  • confirm
  • soul_stone
  • sword_cast
  • sword_hit
  • wand_cast
  • wand_hit
  • player_kick
  • player_punch
  • stone_throw_cast
  • stone_throw_hit
  • grappling_cast
  • grappling_hit
  • grappling_idle
  • hatchet_cast
  • hatchet_hit
  • shovel_cast
  • torch_cast
  • torch_hit
  • torch_idle
  • pickup_stone
  • pickup_wood
  • pickup_tar
  • pickup_success
  • soul_stone_drop
  • wand_drop
  • key_drop
  • cross_deadwood_bump
  • cross_deadwood_row
  • cross_deadwood_splash
  • ui_starfirst
  • ui_starnew
  • ui_starold1
  • ui_starold2
  • ui_starold3
  • ui_starold4
  • bronze_gate_open
  • prompt_choice
  • waterfall_hook_hit
  • waterfall_splash
  • haunted_gate_key_bounce_1
  • haunted_gate_key_bounce_2
  • haunted_gate_key_bounce_3
  • haunted_gate_opening
  • haunted_gate_point_lost
  • haunted_gate_key_into_gate
  • haunted_gate_shuffle
  • haunted_gate_shuffle_fast
  • haunted_gate_torch_off
  • haunted_gate_torch_on
  • haunted_gate_try_to_open
  • paint_splat
  • waterfall_land
  • waterfall_rope_grab
  • waterfall_rope_swing
  • skeleton_boss_death
  • skeleton_boss_legs_die
  • spider_boss_death
  • tree_boss_death
  • mushroom_boss_death
  • tree_boss_attack
  • tree_boss_awake
  • tree_boss_idle
  • tree_boss_spike
  • spider_boss_attack
  • player_hit
  • mushroom_boss_awake
  • mushroom_boss_punch
  • mushroom_boss_shoot
  • skeleton_boss_arm1
  • skeleton_boss_arm2
  • skeleton_boss_attack
  • skeleton_boss_idle
  • skeleton_boss_bone_bounce
  • skeleton_boss_arm_woosh
  • equip
  • unequip
  • bat_attack_small
  • bat_death_small
  • bat_wing
  • bat_wing_small
  • spider_attack
  • spider_death
  • spider_death_small
  • spider_eggs_spawn
  • spider_walk
  • scarab_awake
  • scarab_bite
  • scarab_death
  • scarab_horn
  • scarab_wings
  • mosquito_attack
  • mosquito_death
  • mosquito_loop
  • bronze_gate_locked
  • bat_attack
  • bat_death
  • progress_1
  • progress_2
  • progress_3
  • progress_4
  • progress_5
  • progress_6
  • progress_7
  • progress_8
  • progress_9
  • life_gain
  • player_death
  • logo_full
  • logo_short
  • smithy_hammer
  • sightstone_cast
  • error
  • ranting_tree_halt
  • treasure_close
  • treasure_item_pop
  • treasure_item_show
  • treasure_open
  • skeleton_boss_awake
  • skeleton_boss_hand_slam
  • level_up
  • insta_kill
  • spider_boss_awake
  • metal_drop
  • treasure_drop
  • smithy_hammer_fail
  • xp_tick
  • crossbow_cast
  • crossbow_hit
  • wand_aether_cast
  • wand_aether_hit
  • wand_air_cast
  • wand_air_hit
  • wand_fire_cast
  • wand_fire_hit
  • wand_ice_cast
  • wand_ice_hit
  • wand_poison_cast
  • wand_poison_hit
  • wand_vigor_cast
  • wand_vigor_hit
  • skeleton_boss_arm_reconnect
  • skeleton_boss_summon_minions
  • mushroom_boss_fat_slam
  • pickup_bronze
  • temple_npc_chant
  • temple_npc_clear_throat
  • temple_npc_talk
  • first_controller
  • slave_npc
  • slave_outro_chatter
  • slave_outro_voice
  • haunted_gate_npc_voice
  • slave_outro_transition
  • bronze_guardian_attack1
  • bronze_guardian_attack2
  • bronze_guardian_attack3
  • bronze_guardian_death
  • bronze_guardian_helmet
  • bronze_guardian_power_up
  • bronze_guardian_steps
  • ant_attack
  • ant_death
  • ant_walk
  • snail_attack
  • snail_attack_small
  • snail_death
  • snail_death_small
  • snail_walk
  • ghost_death
  • ghost_death_small
  • skeletimmy_death
  • skeletony_death
  • skeletimmy_attack
  • skeletony_attack
  • skeletony_awake_a
  • skeletony_awake_b
  • skeletony_walk
  • ghost_loop
  • ghost_loop_small
  • ghost_attack
  • ghost_attack_small
  • controller_death
  • controller_whip_attack
  • controller_whip_hit
  • dominotaur_death
  • dominotaur_whip_attack
  • dominotaur_whip_hit
  • mine_walker_death
  • mine_walker_attack_a
  • mine_walker_attack_b
  • mine_walker_attack_hit
  • mine_walker_awake
  • mine_walker_step
  • fire_elemental_attack
  • fire_elemental_attack_hit
  • fire_elemental_awake
  • fire_elemental_death
  • mine_walker_helmet_break
  • ice_elemental_attack
  • ice_elemental_attack_hit
  • ice_elemental_awake
  • ice_elemental_death
  • ki_eater_attack
  • ki_eater_attack_hit
  • ki_eater_awake
  • ki_eater_death
  • ki_gobbler_attack
  • ki_gobbler_attack_hit
  • ki_gobbler_awake
  • ki_gobbler_death
  • ki_slerper_attack
  • ki_slerper_attack_hit
  • ki_slerper_awake
  • ki_slerper_death
  • bell_ringer_attack
  • bell_ringer_attack_hit
  • cult_guard_attack
  • cult_guard_attack_hit
  • cult_marksman_attack
  • cult_marksman_attack_hit
  • cult_sorcerer_attack
  • cult_sorcerer_attack_hit
  • cultist_death
  • flying_serpent_loop
  • poison_adept_attack
  • poison_adept_attack_hit
  • serpent_attack
  • serpent_death
  • serpent_handler_release
  • serpent_hiss
  • serpent_slither
  • worm_rider_hop
  • booklet_open
  • booklet_turn_page
  • booklet_close
  • hammer_cast
  • hammer_hit
  • shield_dash
  • fissure_break_apart
  • fissure_unmake
  • mindstone_off
  • mindstone_on
  • triskelion_fuse
  • potion_berserk
  • potion_cleansing
  • potion_defensive
  • potion_experience
  • potion_healing
  • potion_invisibility
  • potion_lightning
  • potion_lucky
  • potion_strength
  • potion_vampiric
  • bronze_guardian_pulling_hammer
  • bronze_guardian_removing_hammer
  • bronze_guardian_turbine
  • bronze_guardian_ears_ring
  • bronze_guardian_fuse
  • bronze_guardian_attack4
  • yeti_attack
  • yeti_attack_flick
  • yeti_attack_hit
  • yeti_awake_blow
  • yeti_awake_explosion
  • yeti_awake_inhale
  • yeti_awake_lick
  • yeti_blow
  • yeti_blow_ice_wall
  • yeti_death
  • yeti_inhale
  • yeti_inhale_lick
  • nagaraja_awake_roar
  • nagaraja_awake_swallow
  • nagaraja_awake_tongue_1
  • nagaraja_awake_tongue_2
  • nagaraja_dead
  • nagaraja_poison_attack
  • nagaraja_poison_attack_hit
  • nagaraja_wail
  • nagaraja_wail_brick
  • nagaraja_attack_eat
  • nagaraja_attack_lick
  • nagaraja_attack_swallow
  • nagaraja_tongue_damaged
  • nagaraja_tongue_lift
  • nagaraja_tongue_smell
  • nagaraja_tongue_wrap
  • bearer3_talk
  • bearer_attack
  • bearer_attack_hit
  • bearer_death
  • bearer_stealing
  • bearer_super_attack
  • bearer_scream
  • bearer4_talk
  • bearer4_talk_evolving
  • bearer_evolving
  • elementalist_aether_attack
  • elementalist_aether_attack_hit
  • elementalist_aether_blink
  • elementalist_death
  • elementalist_fire_attack
  • elementalist_fire_attack_hit
  • elementalist_fire_blink
  • elementalist_ice_attack
  • elementalist_ice_attack_hit
  • elementalist_ice_blink
  • elementalist_poison_attack
  • elementalist_poison_attack_hit
  • elementalist_poison_blink
  • elementalist_vigor_attack
  • elementalist_vigor_attack_hit
  • elementalist_vigor_blink
  • bearer5_talk
  • elementalist_evolving
  • perfected_attack
  • perfected_attack_hit
  • perfected_death
  • perfected_defense
  • perfected_energy_ball
  • perfected_energy_ball_hit
  • perfected_summon
  • perfected_talk
  • epilogue_devolving
  • epliogue_player_evolves
  • epilogue_talk
  • devolved_talk
  • dysangelos_guidance
  • dysangelos_guidance_1
  • dysangelos_guidance_2
  • dysangelos_guidance_3
  • dysangelos_intro_talk
  • ranting_tree_talk_halt
  • ranting_tree_talk_again
  • ranting_tree_talk_how_dare
  • ranting_tree_talk_avenge
  • ranting_tree_talk_get_out
  • ranting_tree_talk_impressive
  • ranting_tree_talk_very_well
  • hans_talk_intro
  • hans_talk_reward
  • scotty_a_pleasure
  • scotty_a_worthy_opponent
  • scotty_deuced
  • scotty_failte_back
  • scotty_getting_good
  • scotty_grr
  • scotty_guess_which
  • scotty_intro
  • scotty_lets_harden
  • scotty_make_ye_guess
  • scotty_noo_jist
  • scotty_perhaps_the_rules
  • scotty_pick_some_treasure
  • scotty_shall_we_up
  • scotty_we_have_wee_use
  • scotty_well_met
  • scotty_well_then
  • scotty_wizard
  • scotty_wrong_choice
  • scotty_hell_be_back
  • scotty_out_of_treasure
  • scotty_there_he_is
  • nagaraja_choir
  • mushroom_boss_split
  • ant_hill
  • treasure_drop_common
  • treasure_drop_epic
  • treasure_drop_giant
  • treasure_drop_humble
  • treasure_drop_rare
  • dominotaur_awake
  • fire_geyser
  • ice_pillar
  • treasure_item_cyan
  • treasure_item_yellow
  • treasure_item_green
  • treasure_item_blue
  • treasure_item_red
  • treasure_item_rainbow
  • ki_slerper_walk
  • mindstone_found
  • ghost_tomb_death
  • perfected_fly_start
  • perfected_fly_loop
  • perfected_fly_end
  • shop_door_open
  • shop_door_enter
  • scorpion_death
  • bomb_cart_explosion
  • bomb_cart_fuse
  • bomb_cart_move
  • bronze_gate_close
  • poison_powerup
  • acronian_cultist_power_up
  • giant_ice_elemental_attack
  • scout_dialog
  • morel_punch
  • falling_stonefolk
  • scout_arrives
  • scout_leaves
  • scout_wing
  • scout_focus
  • dog_bark
  • frog

Copyright Martian Rex, Inc. 2020

SteamSolo.com