씰자료집

한 틱 따라가기

〈씰〉은 30밀리초에 한 번 깨어나 할 일을 하고 다시 기다립니다. 이 글은 그 한 번 — 「틱」 — 을 처음부터 끝까지 따라가며, 그 사이에 일어나는 일을 일어나는 순서대로 적었습니다. 원작 실행 파일을 직접 읽어 확인한 것만 적었고, 숫자는 모두 게임이 실제로 쓰는 값입니다. 싸움 안쪽의 계산은 싸움의 셈법에 따로 있습니다.

한 틱30ms가 지나면 한 틱. 요즘 윈도에서 원작을 돌려 재 보니 1초에 약 32번입니다.
한 장640×480, 256색. 틱마다 한 장을 그립니다.
한 칸32×32픽셀. 한 화면이 20×15칸입니다.
기억0/1 스위치 3,000개. 이야기의 진행은 모두 여기에 남습니다.

1 · 깨어나기

프로그램은 쉬지 않고 시계를 들여다보다가, 마지막 틱에서 30ms가 지났으면 게임을 한 걸음 진행하고 화면을 한 장 그립니다.

이 시계는 윈도가 주는 밀리초 시계인데, 요즘 윈도에서는 15.6ms 단위로 움직여서 30ms를 넘는 순간은 31.25ms마다 옵니다. 그래서 원작을 직접 돌려 재 보면 1초에 31.98틱이 나옵니다.

늦어진 시간을 따라잡지는 않습니다. 틱 하나가 그 간격보다 오래 걸리면 다음 틱이 곧바로 이어질 뿐, 밀린 틱을 몰아서 돌리거나 화면을 건너뛰지 않습니다. 느린 컴퓨터에서는 게임 전체가 그만큼 느려집니다. 창이 뒤로 가면(다른 프로그램이 앞에 오면) 진행은 멈추고 그림만 계속 그립니다.

깨어난 틱이 맨 먼저 하는 일은 두 가지입니다. 진행 중인 화면 색 전환을 한 단계 밀고, 배경 음악이 끝났으면 다시 틉니다.

2 · 창이 열려 있으면 거기서 끝

상태 책 · 상점 · 저장 · 옵션 · 선택지 · 전투 가운데 하나라도 열려 있으면, 틱은 그 창만 돌보고 끝납니다. 아래의 3번부터 10번까지가 통째로 쉬므로, 상태 책을 펴 둔 동안 NPC가 멈춰 있고 날씨도 멎습니다.

3 · 무엇이 시작되나

창이 없으면 틱은 이번에 새로 시작될 일이 있는지 봅니다. 필드에서 이벤트가 시작되는 길은 아래가 전부입니다.

계기규칙
밟기이벤트 번호가 있는 칸 위에서 방향키를 누른 틱에 시작됩니다. 같은 번호의 칸은 연달아 다시 걸리지 않습니다(다른 이벤트 칸을 밟거나 맵을 옮겨야 풀립니다).
조사Enter · Space · Alt. 앞 칸에 NPC가 있으면 말을 걸고, 문이면 열고, 조사 지점이면 이벤트를 시작합니다. 키는 누르는 순간에만 듣고, 누르고 있어도 반복되지 않습니다.
부딪히기걷다가 문이나 NPC에 막히면 조사한 것과 같이 처리합니다. 조사 지점만은 부딪혀서는 열리지 않습니다.
접촉필드 몬스터 · 터치 이벤트에 닿았을 때(8번).
그 밖새 게임을 시작할 때의 첫 이벤트, 전투가 끝난 뒤 이어지는 이벤트.

눈여겨볼 점이 둘 있습니다. 맵에 도착하는 것만으로는 밟기 이벤트가 시작되지 않습니다 — 도착한 칸에 이벤트가 있어도 방향키를 처음 누르는 순간에야 걸립니다. 그리고 맵에 들어설 때 저절로 시작되는 이벤트라는 것이 따로 없습니다. 맵을 옮긴 뒤의 연출은 옮기기 전의 대본이 그대로 이어서 합니다.

4 · 대본이 한 걸음

이벤트가 도는 중이면 이 틱은 주인공을 움직이는 대신 대본을 한 걸음 진행합니다. 게임의 이야기는 대본 파일 하나에 모두 들어 있습니다. 명령 82,060개가 한 줄로 이어져 있고, 그 사이사이에 이벤트의 시작점을 나타내는 이름표가 2,278개 있습니다. 명령 하나는 「명령 번호 + 숫자 다섯 개 + 글 한 줄」이고, 글에는 대사나 맵 파일 이름이 들어갑니다. 쓰이는 명령은 78가지입니다.

대사는 한 틱에 한 줄씩 찍힙니다. 대사 창은 네 줄이라, 네 줄이 차면 확인 키를 기다린 뒤 지우고 이어 갑니다. 확인 키는 기다리기 시작한 지 6틱(약 0.2초)이 지나야 받아 주므로, 키를 누르고 있어도 대사가 한꺼번에 넘어가지 않습니다. 이 대사들을 이야기 순서대로 모은 것이 이야기 순서입니다.

대본의 기억은 스위치뿐

대본이 쓸 수 있는 기억은 스위치 3,000개입니다. 스위치는 0 아니면 1이고, 숫자를 세거나 더하는 명령은 없습니다. 상자를 열었는지, 보스를 쓰러뜨렸는지, 누구와 이야기했는지가 모두 스위치 하나씩입니다. 조건 명령은 「이 스위치가 켜져 있으면」과 「아니면」 두 갈래이고, 여러 조건은 겹쳐서 씁니다. 스위치 말고도 아이템을 갖고 있는지, 파티에 누가 있는지를 물을 수 있습니다. 선택지는 고른 항목에 딸린 스위치를 켜는 것으로 끝나고, 그 뒤의 갈래는 보통의 조건 명령이 맡습니다 — 이벤트 쪽의 「갈래」 그림이 바로 이 조건들을 그린 것입니다.

무작위로 갈리는 이벤트는 없습니다. 대본에는 난수를 읽는 명령이 없어서, 같은 스위치 상태에서는 언제나 같은 대사가 나옵니다.

대본이 가장 많이 하는 일

하는 일횟수
대사 한 줄17,988
말하는 사람 · 얼굴 지정각 8,100여
NPC 동작 · 방향 바꾸기3,175
NPC 순간 이동2,731
조건 갈래2,046
잠깐 기다리기2,014
다른 맵으로 이동1,691
화면 밝히기 / 어둡게 하기1,622 / 277
스위치 켜기 / 끄기631 / 74
효과음658
배경 음악 바꾸기298
아이템 주기248
선택지198
전투 시작89
상점 · 여관 열기63
동영상40

5 · 걷기

이벤트가 돌지 않으면 틱은 키를 읽어 주인공을 움직입니다.

걷기한 틱에 6픽셀 — 1초에 약 200픽셀(6칸 남짓)
달리기한 틱에 12픽셀. Shift를 누르거나 방향키를 빠르게 두 번 누르면 달립니다.
대각선가로세로 각각 4픽셀(달리면 8픽셀). 세로를 먼저, 가로를 나중에 움직입니다.
키가 겹치면위와 아래는 위가, 왼쪽과 오른쪽은 왼쪽이 이깁니다.

부딪힘은 캐릭터 그림 전체가 아니라 발 주변의 작은 상자로 봅니다. 폭은 그림 폭의 6분의 5, 높이는 그림 높이의 5분의 2이고 발을 중심으로 놓입니다. 머리가 벽이나 지붕에 겹쳐 보여도 지나갈 수 있는 까닭입니다. 가려는 자리에 NPC가 있으면 움직이지 않고 그쪽을 본 채 말을 겁니다(이미 겹쳐 있으면 그냥 빠져나옵니다). 모서리에 걸리면 옆으로 미끄러지듯 비껴 가고, 주인공과 동료는 NPC가 선 칸에 못 들어가지만 동료끼리는 서로를 막지 않습니다.

발밑의 칸

한 걸음마다 발이 닿는 칸의 성질이 길을 정합니다.

칸하는 일
바닥지나갈 수 있습니다.
벽막힙니다. 전체 칸의 약 5분의 1이 벽입니다.
계단(두 방향)가로로 지나가면 한 걸음에 8픽셀씩 위나 아래로 밀립니다. 비스듬한 계단을 좌우 키만으로 오르내리게 해 줍니다.
닫힌 문막힙니다. 조사하거나 부딪히면 열려서 지나갈 수 있게 됩니다. 맞붙은 문 칸도 함께 열립니다.
이벤트 문막힙니다. 조사하거나 부딪히면 열린 모양으로 바뀌면서 그 칸의 이벤트가 시작됩니다(대개 다른 맵으로 이동).
조사 지점막힙니다. 부딪혀서는 아무 일도 없고, 조사 키를 눌러야 이벤트가 시작됩니다. 책장이나 표지판 같은 곳입니다.
소리 나는 지형물가, 불 같은 곳. 지나갈 수 있는 것과 막힌 것이 따로 있고, 화면 근처에 있으면 환경음을 냅니다(10번).

플레이 중에 칸이 바뀌는 것은 문이 열릴 때뿐입니다. 대본에는 칸을 바꾸는 명령이 없어서, 다리가 놓이거나 벽이 무너지는 장면은 모양이 다른 맵 파일을 따로 만들어 두고 그리로 옮기는 방식으로 처리합니다. 같은 장소의 맵 파일이 여러 벌 있는 까닭입니다. 열린 문도 오래가지 않습니다 — 맵은 들어올 때마다 파일에서 새로 읽으므로 나갔다 들어오면 다시 닫혀 있습니다.

6 · 다른 것들도 한 걸음씩

주인공 다음은 맵 위의 다른 인물과 몬스터 차례입니다. 모두 같은 종류의 「액터」이고, 하는 일에 따라 셋으로 나뉩니다.

액터동작
말 거는 NPC앞에서 조사하거나 부딪히면 주인공 쪽으로 돌아서서 대화를 시작합니다. 닿기만 해서는 아무 일도 없습니다.
필드 몬스터닿으면 전투가 시작되고 그 몬스터는 사라집니다.
터치 이벤트몬스터처럼 쫓아오지만, 닿으면 전투가 아니라 이벤트가 시작됩니다. 한 번만 걸립니다.

서성이기 — 걷는 동작 한 번이 끝날 때마다 5분의 1 확률로 방향을 다시 고릅니다. 가로로만, 세로로만 오가는 NPC도 있습니다.

쫓아오기 — 필드 몬스터는 틱마다 주인공과의 거리를 잽니다. 가로 320픽셀, 세로 240픽셀(대략 화면 반 장) 안이면 쫓아오고, 벗어나면 다시 서성입니다. 시야나 벽은 따지지 않아 벽 너머에서도 알아차리지만, 길찾기가 짧아서(열 걸음 앞까지) 복잡한 지형에서는 따라오지 못합니다. 이야기가 어느 정도 진행된 뒤에는 선두가 아루스일 때 필드 몬스터가 다가오는 대신 반대쪽으로 달아납니다 — 대본이 스위치 하나를 켜면서 생기는 변화입니다. 쓰러뜨린 필드 몬스터는 그 맵에 다시 들어오면 되살아납니다.

7 · 동료가 따라오고, 화면이 따라간다

동료는 주인공 뒤의 정해진 자리(진형)를 향해 같은 속도 규칙으로 걸어옵니다. 길이 막히면 짧은 길찾기를 하고, 찾은 길은 기억해 두었다가 다시 씁니다.

카메라는 주인공을 화면 한가운데에 묶어 두지 않습니다. 화면 중앙에 가로 160 × 세로 96픽셀의 여유 구역이 있어서, 주인공이 그 안에 있는 동안은 화면이 움직이지 않습니다. 구역을 벗어나면 벗어난 거리의 4분의 1씩(한 틱에 최대 32픽셀) 따라갑니다. 멀어질수록 빨리, 가까워질수록 천천히 따라붙는 부드러운 움직임이 여기서 나옵니다. 맵 끝에서는 축마다 따로 멈추고, 가로로 화면 한 장짜리 맵은 가로로는 아예 움직이지 않습니다. 대본이 연출 중에 카메라를 옮길 때는 목표 칸까지 축 하나씩, 멀면 빠르게 가까우면 느리게(16 → 8 → 4픽셀) 움직입니다.

8 · 닿았는가

모두 움직인 뒤에 틱은 주인공이 몬스터나 터치 이벤트에 닿았는지 봅니다. 〈씰〉에는 걸음 수나 확률로 걸리는 조우가 없습니다. 전투가 시작되는 경우는 셋뿐입니다.

  1. 필드 몬스터와 판정 상자가 겹쳤을 때
  2. 걷거나 조사하다가 필드 몬스터에 부딪혔을 때
  3. 대본이 전투를 시작시켰을 때

어떤 적이 나오는지도 무작위가 아닙니다. 필드 몬스터마다 「몇 번 전투 편성」이 정해져 있고, 편성 295가지가 자료에 고정되어 있습니다. 무작위인 것은 전투에 들어갈 때의 화면 전환(다섯 가지 가운데 하나)과 처음 행동 게이지 정도입니다. 전투가 끝나면 화면이 어두워졌다가 원래 음악과 함께 필드로 돌아오고, 전멸하면 음악이 멈추고 게임 오버 동영상 뒤에 타이틀로 갑니다.

9 · 한 장 그리기

틱의 마지막은 그림입니다. 해상도는 언제나 640×480이고, 게임은 늘 256색 그림으로 장면을 그린 뒤 화면에 내보낼 때 색 깊이(16비트 또는 8비트)에 맞춰 바꿉니다. 색은 맵마다 들어 있는 팔레트를 씁니다.

그림은 겹겹이

맵은 32×32픽셀 칸으로 이루어집니다. 가로 20칸, 세로 15칸이 정확히 한 화면이고, 이 화면 크기 조각을 가로세로로 이어 붙여 큰 맵을 만듭니다. 가장 작은 맵은 조각 1개(방 하나), 가장 큰 맵은 가로 14 × 세로 14조각입니다. 한 장을 그릴 때는 조각마다 들어 있는 겹을 차례로 올립니다.

겹내용
바닥 · 벽 · 섞임타일 그림 세 겹. 섞임 겹은 바닥과 섞여 그려집니다.
오브젝트나무, 집, 횃불처럼 칸에 세워 두는 그림. 움직이는 것은 칸마다 시작 장면이 따로 있어 서로 어긋나게 움직입니다.
움직이는 배경물결처럼 맵 전체에 깔리는 배경. 4틱마다 한 장면씩 넘어갑니다.
자리 표시그 칸에 서 있는 NPC · 몬스터의 번호. 실시간으로 바뀝니다.
칸 속성지나갈 수 있는지, 문인지, 계단인지(5번의 표).
이벤트 번호밟거나 조사하면 시작되는 이벤트의 번호.

그림 위에 얹는 것

  • 밤 — 따로 준비된 밤 팔레트로 통째로 바꿉니다. 밤은 맵을 옮겨도 이어지고 저장도 됩니다.
  • 색 전환 — 대본이 시작시키면 틱마다 한 단계씩 진행됩니다(1번). 게임은 멈추지 않습니다.
  • 날씨 — 눈, 비, 안개. 눈과 비로 지정된 맵도 들어갈 때마다 5분의 1 확률로만 그대로 내리고, 나머지는 안개로 바뀝니다. 비가 오면 빗소리가 반복됩니다.
  • 흔들림 — 지진 같은 연출은 그려 둔 화면을 틱마다 가로 ±32, 세로 0~31픽셀만큼 무작위로 밀어서 보여 줍니다.

틱을 세지 않는 것들

화면이 어두워졌다 밝아지는 페이드, 흰 섬광, 전투에 들어갈 때의 화면 전환은 틱의 흐름 밖에 있습니다. 시작되면 그 자리에서 끝날 때까지 한 단계씩 그리고, 그동안 게임은 멈춥니다. 페이드는 그림을 다시 그리지 않고 팔레트 전체를 검정이나 흰색 쪽으로 옮기는 방식이고, 한 번이 기본 11단계, 한 단계가 모니터 화면 갱신 한 번이라 길이가 모니터 주사율에 따라 달라집니다(60Hz면 약 0.18초).

10 · 소리

배경 음악 — 맵마다 음악 번호가 하나씩 적혀 있습니다. 옮겨 간 맵의 번호가 지금 나오는 곡과 같으면 아무것도 하지 않으므로 곡이 끊기지 않고 이어집니다. 다르면 멈추고 새 곡을 처음부터 틉니다. 곡이 끝나면 같은 곡을 다시 틀고(1번), 전투에 들어가면 전투 편성에 적힌 곡으로 바뀌었다가 끝나면 들어가기 전의 곡으로 돌아옵니다. 대본이 연출 중에 곡을 바꾸기도 합니다. 곡 목록은 음악 · 효과음에 있습니다.

효과음 — 80개가 한 묶음입니다. 같은 소리를 겹쳐 내지 않고, 이미 나고 있는 소리를 또 내면 멈추고 처음부터 다시 냅니다.

지형 환경음 — 물가나 불 같은 「소리 나는 지형」이 화면 근처에 있으면 틱마다 일정 확률로 소리를 냅니다. 화면 왼쪽에 있으면 왼쪽에서, 오른쪽에 있으면 오른쪽에서 들리고, 화면 세로 중앙에서 멀수록 작게 들립니다.

음악과 효과음의 크기는 옵션에서 바꿀 수 있지만 어디에도 저장되지 않아, 게임을 켤 때마다 기본값으로 돌아갑니다.

여기까지가 한 틱입니다. 다음 틱이 되면 같은 일이 다시 처음부터 시작됩니다.

틱 바깥 · 주사위는 하나

게임 전체가 난수 발생기 하나를 같이 씁니다. NPC의 서성이기, 날씨 입자, 환경음, 전투의 피해가 모두 같은 수열에서 차례로 숫자를 꺼내 갑니다.

이 발생기는 맵을 읽을 때마다 그때의 시각(초 단위)으로 다시 시작됩니다. 그래서 같은 초에 같은 맵에 들어가면 그 뒤의 무작위 결과가 완전히 같습니다. 반대로 화면에 물가가 많거나 NPC가 많이 돌아다니면 난수가 빨리 소모되어, 같은 전투라도 맵에 들어온 뒤 얼마나 지났는지에 따라 결과가 달라집니다.

틱 바깥 · 남는 것과 잊히는 것

저장 슬롯은 6개입니다. 저장 파일에 남는 것은 다음과 같습니다.

  • 플레이 시간, 선두 캐릭터 이름, 소지금
  • 함께 쓰는 가방(아이템과 개수)
  • 파티 멤버 전원과, 잠시 빠져 있는 멤버의 능력치 · 장비 · 기술
  • 지금 있는 맵 이름과 위치, 카메라 위치
  • 스위치 3,000개
  • 밤인지 아닌지
  • 지금 맵에 있는 NPC · 몬스터 각각의 위치와 상태

잊히는 것도 있습니다. 열어 둔 문, 날씨(불러오면 다시 추첨), 배경 음악(맵 파일에서 다시 읽음), 그리고 진행 중이던 대사나 색 전환입니다. 저장한 맵 안에서는 쓰러뜨린 필드 몬스터가 쓰러진 채로 돌아오지만, 다른 맵의 몬스터는 기억하지 않습니다. 오래 남는 것은 결국 스위치뿐이라서, 「한 번 연 상자」나 「쓰러뜨린 보스」는 대본이 스위치로 기억했다가 맵에 들어올 때 다시 치워 놓습니다.

퀵세이브Shift+S — 따로 파일이 있는 것이 아니라 1번 슬롯에 저장합니다.
퀵로드Shift+L — 1번 슬롯을 불러옵니다.
메모장게임 안의 일기 · 메모는 저장 슬롯과 같은 번호의 별도 파일에 저장됩니다.
달성률타이틀에 나오는 달성률은 스위치 3,000개 가운데 「세는 스위치」 456개 중 한 번이라도 켠 것의 비율입니다. 저장할 때마다 갱신되고, 모든 슬롯 · 모든 회차를 통틀어 쌓입니다.

틱 바깥 · 숨은 스위치

설정 파일은 숫자 세 줄입니다. 화면 색 깊이(16 또는 8), 음악 종류, 조이스틱 사용 여부입니다. 색 깊이는 동영상 품질도 함께 정합니다. 16비트면 고화질, 8비트면 저화질 동영상을 틉니다.

게임 폴더에 특정 이름의 빈 파일을 하나 두면 아군이 받는 피해가 모두 0이 되고 후퇴가 항상 성공합니다. 제품에는 이 파일이 들어 있지 않으므로 개발 중에 쓰던 무적 스위치로 보입니다.

esc

↑ ↓ 고르기↵ 열기esc 닫기