의 퍼즐 게임 시리즈 | ||
{{{#!folding [ 펼치기 / 접기 ] | SpaceChem | Infinifactory |
TIS-100 | SHENZHEN I/O | |
Opus Magnum | EXAPUNKS | |
MOLEK-SYNTEZ | Last Call BBS | }}} |
엑사펑크 EXAPUNKS | |
개발 | Zachtronics |
유통 | Zachtronics |
플랫폼 | Microsoft Windows | macOS | Linux |
ESD | Steam | GOG.com | itch.io |
출시 | 2018년 10월 22일 |
장르 | 인디, 퍼즐 |
한국어 지원 | 미지원 |
웹사이트 | 공식 홈페이지 |
[clearfix]
1. 개요
공식 트레일러 |
Xbox 버전 출시 당일 Xbox Game Pass에 게임이 등록되었다. 발매 첫날부터 PC에서 플레이가 가능하다.
2. 스토리
2.1. 등장 인물
- Moss : 주인공. 몸이 기계로 바뀌는 난치병인 Phage에서 살아남기 위해 해킹을 해야 한다. 과묵한 주인공 컨셉인지 채팅방의 접속 상태가 항상 오프라인으로 되어있다.
- EMBER-2 : 목적을 알 수 없는 인공지능 여성. 주인공이 돈을 벌 수 있도록 여러 해킹 미션을 제공해준다.
- Nivas : 주인공에게 Phage 억제약을 주는 여성. 주인공과 친분이 있다. 여러모로 뒷골목 일에 많이 연루되어 있는 듯 하다.
- Isadora : 'Last Stop'에서 일하고 있는 여성. 주인공과 친분이 있다.
- Ghast : 해커 그룹 Exapunks의 대장급. 게임 내에서 매뉴얼 역할을 하는 잡지의 편집자이기도 하다. 주인공과 오랜 친구이며 다른 해커 동료들과는 달리 게임 내에서 직접 교류하기도 한다. 주인공이 활동을 재개할 때 당황하는 다른 인물들에게 주인공이 살아있다고 확인해 주기도 한다.
- 그 외 Exapunks 구성원: 미션 선택창 우측 하단에 있는 채팅창에 보이는 이름들. 항상 별 이상한 주제로 신나게 떠들고 있다. 주인공이 해킹을 한 뒤에 발생하는 사건사고들에 대해서 이야기 하기도 한다. 주인공이 했다는 걸 모른채 당하고 있는걸 보는게 재미.[1] 상대 EXA와 경쟁을 벌이는 대결 미션에서 상대 NPC로 등장한다. 몇번 실행해보면 행동 알고리즘이 쉽게 읽힐 정도로 단순한 코딩을 해놓았기 때문에 플레이어가 조금만 효율적으로, 혹은 맞대응하는 방식으로 코딩하면 테스트 런 100회를 모두 간단히 이길 수 있다.
- selenium_wolf : 해커 배틀의 마지막 상대. 잡지의 편집기자(Contributing Editor)이자 TRASH WORLD kitchen 파트의 기고자이며 EXAPUNKS 채널의
파딱부매니저. 현업에선 게임 개발자로 매우 바쁘게 일하고 있는 듯하다. - deadlock : 해커 배틀의 세번째 상대. 주된 대화 소재 없이 다른 이들의 장단에 맞춰주는 역할로 등장한다. 주인공을 동경하는 듯한 대사가 많다. EXAPUNKS 채널 구성원들 중 유일하게 직접적으로 게임에 사용되는 내용인 GIS에 대해서 기고했다.
- hydroponix : 중2병 환자 겸 음모론자. 정부에서 정치인들의 DNA 데이터베이스를 만들어 놓고 클론을 뽑아낸다는 음모론을 밀고 있다. 대화록을 보면 배고프다는 얘기를 반복해서 하는 등 음식과 관련이 깊다. 가끔 멋진 말을 하기도 하는데 엔딩 직전에서 가서 하는 말을 보면 그냥 중2병 걸려서 멋진 말을 골라 쓰는듯(...).
- mutex8021 : 주인공이 EXAPUNKS 채팅방에 처음 접속할 때 아무도 없냐며 혼잣말을 하면서 가장 먼저 등장한 인물이자 해커 배틀의 첫 상대. 세계관 내 온라인 게임인 'King Ransom Online'의 토끼겅듀인지 채팅방 내에서도 홍보를 하며 나중에 게임이 해킹당하자 울상이 된다. 의외로 혼잣말 하는 상황이 많이 연출되는 캐릭터.
- NthDimension : 채팅방 내에서 가장 나이가 어린 것으로 추정되는 인물. Haxtasy라는 세계관 내의 해커들을 위한 주점 얘기가 나올 때 얼른 어른이 되고 싶다는 발언을 한 걸 보면 미성년자인 것 같다. 중반쯤 들어서면 접속 상태가 오프라인이었다가 후반부에 다시 들어오는데 못들어온 이유가 부모님에게 컴금을 당해서(...).
- =plastered : 해커 배틀의 두번째 상대. 워다이얼러[2]를 연구하고 있으며, 워다이얼링을 통해 알아낸 정보들을 잡지에 기고하거나 hydroponix의 음모론과 관련한 정황증거들을 발견하기도 한다. 다른 이들과의 대화 내용을 보면 츳코미 계열. 후반부에 닉네임 앞의 '='에 대한 이야기를 나누는데, 취한 상태로 회원 가입을 한 결과물이라고 한다.
- x10x10x : 해커 배틀의 네번째 상대. 염세주의 성향이 있는 것으로 보이며 어떤 주제로 얘길 하던지 항상 욕이 튀어나온다. 자신의 차례가 오기 전까지 주인공이 돌아왔다는 사실을 인정하지 않지만 패배하고 난 뒤에는 주인공의 복귀를 환영하며 재매치를 요청하는데, 일식 때문에 집중을 못했다고.
지랄말라는 =plastered의 츳코미는 덤
2.2. 엔딩
앰버-2는 주인공에게 마지막 임무를 제안한다. 바로 대뇌피질의 신호를 분석하여 앰버-2에게 전송하는 것. Phage 억제약을 더 이상 구할 수도 없고 전이도 점점 빨라지고 있었기에 앰버-2는 비록 육신을 지켜주지는 못하더라도 컴퓨터 시뮬레이션 상의 감각들을 통해 존재론적으로 실존한다고 믿어지는 주인공을 만들어내려 한다.
임무를 끝마치면 앰버-2가 무언가를 작동시키고 대화가 이어진다.
3. 상세
각각의 미션에 대하여 매뉴얼상의 정보를 참조하는 부분이 많다보니[3], TIS-100이상으로 매뉴얼 의존도가 높은 편이다. 게임 속에서 추천하는 대로 프린트해두거나, 디지털판 매뉴얼을 스마트폰에 저장하고 보고 하는 편이 좋다.제작자인 재커리 바스는 프린트 보관 및 열람을 적극 권장하고 있다. AMA에서 'PDF 파일 내 텍스트 검색이 가능하게 해 달라' 라는 요청이 들어왔을 때도 '많이 고민했던 문제인데 인쇄 사용을 권장하는 차원에서 지원하지 않기로 했다' 고 대답했을 정도다. 이유인즉슨 이번에는 매뉴얼이 전작들의 설명서 차원을 넘어 가상의 잡지이기 때문에, 잡지를 뒤지면서 팁을 찾아 헤메는 느낌을 살려내고 싶었다고 한다.
3.1. 레지스터
플레이어가 코딩한 각각의 EXA들이 접근 가능한 레지스터들이다. 기본적으로 각각의 EXA에 개별적으로 내장된 X, T, F, M 레지스터가 존재하며, 미션에 따라서는 #으로 시작하는 이름을 가진 레지스터가 호스트상에 존재하는 경우가 있다.- X : 가장 무난하게 사용 가능한 저장소. 한번 저장된 값은 나중에 덮어쓰지 않는 이상 계속 유지된다.
- T : TEST 명령어의 결과값이 저장되는 저장소. TEST 명령어를 사용하지 않는 경우라면 X와 더불어 단순한 저장소로 사용이 가능하지만, TEST 명령어를 처리하게 되면 저장된 값이 1(참) 혹은 0(거짓)으로 덮어씌워지므로 주의가 필요하다.
- M : 메시지 패싱용 레지스터. 하나의 EXA에서 값을 M 레지스터에 저장하려 하고[4], 또다른 EXA에서 M 레지스터를 통해 값을 읽어내려 한다면[5], 두 EXA간에 통신이 이루어져 값을 주고받을 수 있다.
- 메시지 패싱은 두 EXA간의 1대1 통신이며, 통신이 완료된 시점에서 송신측과 수신측 모두 통신이 종료된다. 송신측에서 특정 값을 여러 EXA에게 보내고자 한다면, 수신하는 EXA의 갯수만큼 송신 명령을 반복해야 한다.
- 방향성이 존재해 수신자를 지정 가능했던 TIS-100와 달리, M 레지스터 통신의 경우 수신자를 지정할 수 없다. 엉성하게 통신망을 구성할 경우 엉뚱한 EXA가 값을 수신한 채 통신이 종료되는 경우가 발생할 수도 있다.
- 동일한 사이클에 2대 이상의 송수신이 이루어진다고 했을 때, 한발 먼저 송신이나 수신 상태에 돌입하여 대기중이었다고 해서 먼저 통신이 완료된다고는 장담할 수 없다.[6]
- GLOBAL과 LOCAL이라는 2개의 통신 채널이 존재한다. 사전에 EXA의 명령어창 우측 하단의 버튼을 눌러 해당 EXA의 디폴트 채널을 변경해줄 수 있고, MODE 명령어를 사용하여 프로세싱 도중에 EXA가 유동적으로 바꾸게할 수도 있다. M 레지스터를 이용한 통신은 같은 채널끼리만 가능하므로 GLOBAL 상태 EXA와 LOCAL 상태 EXA간의 통신은 불가능하다.
- GLOBAL 상태에서의 통신은 EXA가 어느 호스트에 위치했는지에 구애받지 않는다. 같은 호스트의 GLOBAL EXA는 물론 다른 호스트에 위치한 GLOBAL EXA와도 통신이 가능하다.
- LOCAL 상태에서의 통신은 같은 호스트상의 EXA에 한정된다. 서로 다른 호스트에 위치한 EXA끼리는 똑같이 LOCAL 상태라 하더라도 통신이 불가능하다.
- F : 해당 EXA가 들고있는 파일에 접근하는 레지스터. 해당 파일에 저장된 값을 읽어올 수도, 값을 입력할 수도, 삭제할 수도 있다. 어떠한 식으로든 F 레지스터를 통해 값을 읽어오거나 파일의 값을 고쳐쓸 경우, 파일 속 커서가 다음 위치로 자동으로 이동한다.
- #---- : 특정 미션에 한정적으로 등장하는 레지스터들. 하드웨어 저장소에 접근할 수 있는 레지스터이다. 이름은 미션상의 역할에 따라 #DATA, #CLRS등등 여러가지다. 기본적으로 호스트상에 파일 데이터처럼 위치해 있지만, EXA를 이용해 집어서 다른 호스트로 옮기는 것은 불가능하며, 해당 레지스터가 자리한 호스트에 위치한 EXA에 한하여 접근할 수 있다. 레지스터에 따라 읽기 전용과 쓰기 전용으로 나누어져 있다.
3.2. 명령어
R은 레지스터(REGISTER), R/N은 레지스터와 숫자(REGISTER/NUMBER), L은 라벨(LABEL)이다.3.2.1. 값 수정
EXA가 처리할 수 있는 값의 절대값은 9999를 넘을 수 없다. 다섯자리 이상을 수동으로 저장하려 한다면 에러로 인해 실행 자체가 불가능하고, 연산 결과값이 다섯자리 이상이 된다면 결과값은 9999로 클리핑된다.- COPY R/N R : R/N을 R에 저장한다.
- ADDI R/N R/N R : R/N에 R/N을 더하여 R에 저장한다.
- SUBI R/N R/N R : R/N에 R/N을 빼서 R에 저장한다.
- MULI R/N R/N R : R/N에 R/N을 곱하여 R에 저장한다.
- DIVI R/N R/N R : R/N에 R/N을 나눈 몫을 R에 저장한다.
- MODI R/N R/N R : R/N에 R/N을 나눈 나머지를 R에 저장한다.
- SWIZ R/N R/N R : R/N을 R/N을 이용하여 뒤섞은 다음 R에 저장한다.
- 일의 자리를 1, 십의 자리를 2, 백의 자리를 3, 천의 자리를 4로 규정하여, 두번째 R/N에 입력된대로 첫번째 R/N에 입력된 값을 재구성해 R에 저장하는 방식이다. 예를 들어 첫번째 R/N이 6789일 때, 두번째 R/N이 1342로 입력되었다면 R에 저장되는 값은 9768이 되고, 두번째 R/N이 3333로 입력되었다면 7777이 되고, 두번째 R/N이 1122로 입력되었다면 9988이 된다.
- 굳이 자리수를 똑같이 맞출 필요는 없다. 예를들어 첫번째 R/N이 6789, 두번째 R/N이 4이라면, R에는 6이 저장된다.
- R에 저장되는 값의 부호 여부는 두 R/N의 부호의 곱셈에 의존한다.[7]
3.2.2. 분기
- MARK L : 이 행은 L이라는 이름을 가진 레이블이 된다.
- JUMP L : L 레이블로 점프한다.
- TJMP L : T 레지스터가 1(참)일 경우 L 레이블로 점프한다.
- 굳이 1이 아니더라도 T 레지스터에 0 이외의 아무값이나 들어가 있으면 L 레이블로 점프한다.
- FJMP L : T 레지스터가 0(거짓)일 경우 L 레이블로 점프한다.
- T 레지스터에 카운팅 값을 저장해두고 SUBI나 ADDI로 카운팅을 해서 FJMP를 이용해 바로 T = 0을 체크하는 방식을 사용한다면, TEST 명령어 없이도 루프 탈출문이 완성된다.
3.2.3. 비교기
- TEST R/N (< or > or =) R/N : 두 R/N을 부등호 혹은 등호대로 비교하여, 참일 경우 1, 거짓일 경우 0을 T 레지스터에 저장한다. 레지스터에 저장된 문자열도 비교의 대상이 될 수 있으며, 각각의 비교 결과는 다음과 같다.
TEST R/N = R/N | TEST R/N < R/N | TEST R/N > R/N | |
숫자 / 숫자 | 등식대로 비교 | 숫자를 부등식대로 비교 | |
문자열 / 문자열 | 등식대로 비교 | 문자열을 부등식대로 비교[8] | |
숫자 / 문자열 | 항상 거짓 |
3.2.4. 라이프 사이클
- REPL L : 현재 위치한 호스트에 EXA를 한기 복제하여 배치한다. 원본 EXA는 REPL 명령어의 다음줄로 넘어가며, 복제된 EXA는 L 레이블의 시작 지점부터 명령어를 시작한다.
- 레이블의 위치에 따라 원본 EXA와 복제된 EXA가 완전히 다른 명령 사이클을 돌게 만들 수 있다. 잘만 사용하면 효율적인 미션 달성에 큰 도움이 된다.
- 복제된 EXA는 REPL 명령어가 실행된 시점의 원본 EXA의 X와 T레지스터 값을 똑같이 복사해 가지고 있다.
- HALT : 이 EXA를 종료하고 파괴한다.
- TIS-100와 달리 EXA는 코드의 제일 마지막 행에 도달하여 더이상 받을 명령이 없을 경우 자동으로 파괴되고, 또한 실행불가능한 명령을 받았을 경우(읽기 전용 파일에 값을 저장하려 한다, 존재하지 않는 연결 통로에 링크하려 한다, 파일을 잡고 있는 상태에서 다시 한번 다른 파일을 잡으려 한다 등등) 자동으로 파괴되는 일이 다반사이므로, 꼭 필요한 경우가 아니라면 HALT는 사용하지 않는게 기록적인 면에 도움이 된다.
- KILL : 현재 위치한 호스트에 존재하는 다른 EXA를 1기 파괴한다. 우선적으로 플레이어 자신이 생성한 EXA가 타깃이 된다. 타깃이 될 복수의 EXA가 존재할 경우, 어떤 EXA를 파괴할지는 예측할 수 없다.
- 현 위치에 타깃이 될 다른 EXA가 존재하지 않는다 하더라도 불가능한 명령으로 취급되지 않는다. 즉, KILL 명령을 수행하는 EXA 자신이 불가능한 명령이라며 파괴되는 일은 발생하지 않는다.
- 비효율적인 방법이지만, 미션 주요 조건을 달성한 이후에도 무한히 명령을 순환하는 EXA를, 특정 EXA의 KILL 명령으로 파괴하여 미션을 종료시키는 방식의 플레이도 가능하다.
3.2.5. 이동
- LINK R/N : R/N에 해당하는 통로를 통해 다른 호스트로 이동한다.
- 한 통로를 동시에 여러 EXA이 이용하려 하더라도 SpaceChem나 Opus Magnum처럼 충돌판정따위가 발생하지 않지만, 특정한 하나의 통로를 이용할 수 있는 것은 한 사이클에 하나의 EXA 뿐이므로, 모든 EXA가 해당 통로를 통과하는 데에는 다소 시간 지연이 발생한다.
- 동시에 여러 EXA가 하나의 통로를 이용하려 할 때, 어떤 EXA가 먼저 통로를 통과할지는 예측할 수 없다.
- 통로 이용 횟수는 미션 결과 보더의 activity와 연관된다. REPL 명령어를 이용해 복제를 잘 활용하고, M 레지스터 통신을 이용해 미션을 마무리하여 통로 이용을 최소화한다면 미션 보더상에 좋은 기록을 남길 수 있다.
- HOST R : 현재 위치한 호스트의 이름을 R에 저장한다.
3.2.6. 통신
- MODE : 해당 EXA의 통신 채널을 GLOBAL으로, 혹은 LOCAL으로 바꾼다.
- VOID M : M 레지스터에서 값을 받아와서 버린다.
- 타 EXA와의 통신을 통해 동작 트리거만 얻을 용도로, 받는 값 자체는 중요하지 않을 경우 사용할 수 있다.
- TEST MRD : 현재 자신이 대기없이 수신할 수 있는 EXA, 즉 현재 송신 대기 상태인 EXA의 존재 여부를 체크한다. 결과 값은 역시 1과 0의 형태로 T 레지스터에 저장된다.
- 수신 가능한 송신자의 갯수를 찾는 것이므로, GLOBAL과 LOCAL이 개별적으로 체크된다. 예를들어 GLOBAL 채널으로 설정된 EXA이 TEST MRD를 사용하더라도 LOCAL 송신자를 체크할 수는 없다.
3.2.7. 파일 수정
- MAKE : 새로운 빈 파일을 생성한다.
- 파일은 해당 EXA가 들고 있는 상태로 생성된다. 이미 파일 하나를 들고 있는 상태에서 MAKE 명령어를 실행하면 불가능한 명령이 된다.
- GRAB R/N : 현재 호스트에 존재하는 R/N라는 이름의 파일을 집어든다.
- 하나의 파일은 하나의 EXA만이 들고 있을 수 있다. 이미 다른 EXA가 들고 있는 파일을 GRAB 명령으로 집으려하면 불가능한 명령이 된다.
- SEEK R/N : 파일 내의 커서를 앞(양수),뒤(음수)로 R/N의 숫자만큼 이동한다.
- F 레지스터를 통해 파일 내의 값을 참조할 때마다 커서가 자동으로 뒤의 값으로 이동하므로, 이를 다시 재위치 시키기 위해 자주 사용된다.
- -9999, 9999같이 한없이 큰 값을 입력시켜 파일의 제일 앞, 제일 뒤로 커서를 이동시키는 것도 가능하다.
- VOID F : 현재 커서가 위치한 값을 삭제한다.
- DROP : 들고있는 파일을 내려놓는다.
- 빈 손의 EXA는 내려놓을 것이 없다. 아무것도 없음에도 DROP 명령으로 내려놓으려하면 불가능한 명령이 된다.
- 불가능한 명령어, 타 EXA에 의한 KILL, 제일 마지막행에 도달 등의 이유로 EXA가 파괴되면 그 EXA가 들고있던 파일은 해당 호스트에 그대로 남으므로 거의 사용할 필요가 없다. 사용을 최소화하면 사이클과 사이즈 기록 향상에 도움이 된다.
- WIPE : 들고있는 파일을 삭제한다.
- TEST EOF : 현재 커서가 파일 제일 뒤의 빈칸에 위치했는지 여부를 체크한다. 결과 값은 역시 1과 0의 형태로 T 레지스터에 저장된다.
- 커서가 값이 없는 위치에 존재할 때 COPY 명령어등으로 F의 값을 읽어오려하면 불가능한 명령으로 취급되어 파괴된다. 만약 파일을 읽던 EXA가 모두 읽고 나서 파괴되는 일 없이 그 사실을 EXA에 전해야 한다면 필수적으로 사용해야 하는 명령어이다.
3.2.8. 기타
- NOTE : 해당 행은 주석으로 취급된다.
- NOOP : 아무것도 하지 않는다.
- GLOBAL 채널로 몇 쌍 이상의 EXA들이 혼선없이 통신을 주고받아야 하는 경우, 주기 사이클을 맞추는데 편리하다.
- RAND R/N R/N R : R/N과 R/N 사이의 값중에서 무작위 값을 R에 저장한다.
- 특정 미션[9]에서는 막혀있다. 베타 테스트에서 발견된 오류 때문이라고 한다.
3.3. 매크로
매크로는 명령어가 아니라 고정된 횟수의 반복 노가다 코드를 자동으로 완성시켜주는 문법이다.- @REP N ... @END : 범위 내 명령어, 즉 ... 부분을 N회 복붙하게 된다.
- @{N,N} : 위 매크로와 조합 시, 해당 위치는 첫 번째 반복문에선 첫 번째 N으로 치환되고, 이후 반복마다 두 번째 N씩 증가한 숫자로 치환된다. 매크로이기 때문에 80@{0,1} 등 명령어에 직접 붙일 수 있다. 위를 세 번 반복하면 해당 위치는 반복된 부분마다 각각 800, 801, 802로 치환된다.
3.4. 미션 태스크 보더
모든 미션은 주어진 조건을 모두 충족해야 달성되는 방식이며, 약간씩 조건이 달라지는 100회의 테스트 런을 모두 통과해야한다. 미션을 모두 달성했을 시 플레이어가 얼마나 효율적으로 미션을 풀어냈는지가 사이클, 사이즈, 액티비티로 나누어 표시된다.- 사이클 : 하나의 테스트런을 통과하는데 걸린 사이클 횟수. 100회의 테스트 런중 가장 오래걸린 테스트 런의 사이클이 기록으로 남는다.
- 사전에 예상 가능한 횟수만큼 반복 명령을 수행하는 경우라면, 루프문을 만드는 것보다 매크로를 이용해 반복해서 적는 것이 사이클 단축에 유리하다.
- 몇몇 미션의 경우, 명령을 무한 반복하는 EXA와 미션 태스크 달성 여부를 감지하는 EXA를 별도로 구현하여, 미션 태스크가 달성된 즉시 후자의 EXA가 다른 EXA들을 KILL하도록 하면 사이클이 줄어드는 경우가 있다.
- 사이즈 : 코딩한 명령어의 갯수. 미션별로 최대 사이즈 제한이 존재하며, 이를 초과할 경우 미션을 달성했더라도 아무런 기록이 남지 않는다.
- 비슷한 명령을 7~8회이상 반복하는 경우라면, 루프문을 구성해서 사이즈를 줄일 수 있다. 물론 이경우 사이클면에서 손해를 보게 된다.
- 액티비티 : 하나의 테스트 런에서 EXA가 LINK 명령어와 KILL 명령어를 실행한 횟수.
- REPL을 적절히 사용해 최소한의 LINK만으로 EXA들이 자리를 잡고, 이후 모든 프로세싱을 M 레지스터를 이용한 통신으로 처리한다면 액티비티 기록을 눈이 띄게 단축할 수 있다. 대부분의 미션에서 최소 액티비티 기록은 정해져 있다.
- KILL은 대부분의 미션에서 필수로 사용되는 명령어가 아니다. KILL명령을 사용하는 대신 M 레지스터 통신을 이용한 상호 인터럽트나 TEST MRD를 이용해 자가적으로 종료되도록 구현할 경우 액티비티를 조금이나마 줄일 수 있다.
4. 여담
- Zachtronics의 다른 퍼즐 게임과 마찬가지로 여기서도 다른 플레이어들과 효율 경쟁이 가능하다. 시간, 코드 용량, 접속 횟수의 3가지 부문에서 다른 플레이어들과 비교할 수 있다. 게임이 너무 쉽게 느껴지면 이 중 한 가지에 도전해보자.
- Zachtronics의 다른 퍼즐 게임과 또 마찬가지로 작은 1인용 미니 게임이 포함되어있다. 그것도 두 개나!
- 솔리테어(ПАСЬЯНС):
- 해킹*대결(HACK*MATCH):
- Zachtronics의 다른 퍼즐 게임과는 다르게 해커 배틀이 있다. 제한된 코드로 주어진 목표를 달성하며, 내 점수를 상대보다 높게 만들어야 한다. NPC와의 대결이 한 번 끝나면 스팀 친구에게도 도전장을 내밀 수 있다. Zachtronics가 직접 소소하게 여는 해킹 대회도 있다.
- SHENZHEN I/O와 비슷하게 직접 게임 내 언어로 게임을 만들 수 있는 샌드박스 미션인 Redshift 홈브루가 있다.
- 메인 캠페인을 클리어하면 9개의 보너스 캠페인 미션이 추가된다. 메인 캠페인과 비슷해보이면서도 묘하게 꼬아놓은 난이도가 특징이다. 예를들어 미 국방부 미션의 경우, 비밀번호를 풀고 내부에 있는 파일 내용을 복사하는 단순한 미션이지만, 미션 호스트와 플레이어 호스트에 위치한 EXA간의 M 레지스터 통신이 금지되고, 미션 호스트 내에 존재하는 EXA의 댓수가 1대를 넘을 수 없으며, 또한 복사해올 파일이 위치한 호스트의 넓이는 단 2칸이기 때문에, 다른 호스트에 새 파일을 위치시킨채 1대의 EXA가 왕복하며 문자열을 하나하나 복사 붙여넣기 하는 방식을 사용할 수 밖에 없다. 또한 미션 풀이에 도움이 되는 미션 내 요소를 따로 설명하지 않는 경우도 있다.[팁주의]
[1] 대화 내용을 보면 이들에게 주인공은 거의 전설과 같은 존재인듯. 첫 해커배틀 mutex8021전에서 주인공에게 털린 뒤 나눈 대화를 보면, deadlock은 Moss라는 이름이 나오자마자 발광을하고, x10x10x는 수년간 주인공에 대한 소식을 못들었다는 얘기를 하며, =plastered는 주인공이 죽었다고 생각했다고 한다. 2차 해커배틀 =plastered전에서도 x10x10x는 다른 누군가가 주인공의 이름을 사칭하고 다닌다고 생각했다.[2] 수천 개의 전화번호에 전화를 걸어 모뎀이 연결된 전화번호를 찾는 해킹 프로그램의 일종.[3] 일본산 콘솔 게임기를 해킹하여 지역 코드를 해제하는 미션에서는, 해킹에 앞서 게임기 자체의 잠금을 해제하는데 필요한 언락 코드를 매뉴얼에 적어놓았다.[4] COPY X M(X에서 읽어낸 값을 M에 저장한다.), ADDI X T M(X에서 읽어낸 값과 T에서 읽어낸 값을 더한 뒤 M에 저장한다.) 등등.[5] COPY M X(M에서 읽어낸 값을 X에 저장한다.), LINK M(M에서 읽어낸 값에 해당하는 번호의 연결 통로에 접근하여 다른 호스트로 이동한다.) 등등.[6] 가령 송신측 EXA A, B로부터 수신측 EXA C가 A, B 순으로 값을 받아들이도록 의도했다고 하자. 실제 프로세싱중 A가 먼저 송신 명령어에 도달하여 대기 상태가 되고, 뒤이어 B도 송신 대기 상태에 들어간 상황에서, C가 수신 명령을 2번 반복하여 두 EXA로부터 값을 받아온다고 했을 때, B의 값을 먼저 받은 뒤에 A의 값을 받는 의도치 않은 현상이 발생할 수 있다.[7] (양수)*(양수)=(양수), (양수)*(음수)=(음수), (음수)*(음수)=(양수)[8] A가 가장 작고 Z가 가장 크다. 표적 문자열의 템플릿이 존재하지 않아 부등식을 이용해 표적 문자열을 찾아야만 하는 미션도 존재한다.[9] 기반할 정보값 없이 특정 위치를 찾아가야 하는 미션 종류.[팁주의] 국방부 미션의 #LOCK 레지스터는 레드시프트 미션의 #PASS나 모뎀 미션의 #DIAL 레지스터처럼 특정 값을 입력받으면 링크를 열어주는 역할을 한다. 하지만 추가적으로 #LOCK의 경우 입력받은 값의 각 자리수를 분석하여, 맞는 자리수는 그대로, 그렇지 않은 자리수는 0으로 저장하는 특성이 있다. 가령 #LOCK에 임으로 123이라는 번호를 입력했고, 그중 십의자리인 2와 백의자리인 1이 비밀번호와 일치한다고 했을 때, 잠금이 풀리지 않더라도 #LOCK에는 120이라는 값이 저장되고, #LOCK에서 값을 읽어오려 하면 그 값을 얻을 수 있다. 이를 이용해 앞선 미션들처럼 '비밀번호 입력 ->링크에 EXA를 때려박아서 확인'같은 비효율적인 방법을 사용하지 않고 빠른 시간 내에 잠금을 풀 수 있다.