Mindustry/콘텐츠/로직
1. 개요
[image]
- 이 문서는 6.0 정식 버전 기준으로 작성되었습니다.
컨베이어 몇줄과 수개의 매스드라이버를 할것을 단 한 블럭과 유닛 몇마리로 압축하는 자동화와 공간절약의 종결자다.
2. 상세
[image]
기본적으로 마이크로 프로세서를 클릭한 뒤 필요한 인근 블록들을 지정하고, 로직을 작성하는 식으로 이용된다.
로직은 jump 등이 없다면 위에서부터 차례대로 아래로 실행하며, 이를 무한히 반복한다.
로직의 작성은 게임 내에서 직접 로직 블록을 추가, 값을 변경하거나 하는 식으로 할 수 있지만, 숙달된다면 외부에서 문법을 작성하고 이를 복사해 붙여넣는 식으로[1] 효율적으로 작성할 수도 있다.
외부에서 작성하는 경우 문법만 맞으면 메모장을 이용해도 상관없으나, vscode를 이용한다면 'masm' 플러그인을 받아 하이라이팅 기능[2] 의 도움을 받을 수도 있다.
위키가 부실하다면 빌드 107 버전 기준 로직 위키 설계도를 참고해도 된다.
3. 목록
3.1. 메모 블록
블록 위에 커서를 올리면 저장해둔 문구가 띄워지는 블록이다.
같은 구역에서 작업하는 다른 사람들이 참고하거나 주의해야될 정보를 적는 용도로 쓰인다.
다만, 매 판이 며칠씩 걸리는 게임도 아니고, 채팅 기능 또한 존재하기에 잘 쓰이진 않는다.
3.2. 스위치
블록을 클릭하는것으로 키고 끌 수 있다.
자체적으로는 그것밖에 기능이 없지만, 프로세서에서 sensor 블록을 통해 on/off 상태를 감지할 수 있기 때문에 유용히 쓰인다.
참고로 'switch'의 'on/off' 상태를 표시하는 속성은 enabled 이다. 해당 값을 이용해 분기를 해도 되지만 단순히 다른 블록을 활성화, 비활성화 하는 경우에는 enabled 값만 받아와 직접 집어넣어줘도 된다.
3.3. 마이크로 프로세서
로직의 핵심 블록이다.
여기서 작성된 로직은 순서대로 무한히 수행되며, 작성하기에 따라 복잡한 블록으로 처리해야 될 까다로운 동작이나 감지 등을 자동화 할 수 있다.
이하 프로세서 종류들은 감지 길이와 연산 속도만 더 좋을 뿐, 기본적인 기능은 다르지 않다.
3.4. 로직 프로세서
3.5. 하이퍼 프로세서
냉각수를 쓰기 때문에 아주 넓은 범위가 필요한 경우가 아니라면 그다지 쓰이지는 않는다.
3.6. 메모리 셀
매 반복마다 초기화되는 프로세서 동작 내 변수 값을 유지시키고 싶을 때 사용한다.
이를 이용하면 카운터도 만들 수 있다.
3.7. 메모리 보관소
3.8. 로직 디스플레이
3.9. 대형 로직 디스플레이
4. 로직 언어
프로세서에서 사용되어 복잡한 동작을 구현할 때 쓰이는 언어이다.
122.1 버전 기준으로 총 18개의 명령어 블록이 존재한다.
아이템 등 내부적으로 지정된 상수를 이용할 땐 앞에 @를 붙여 적으면 된다. 예를 들어 @titanium 은 티타늄 아이템을 의미한다.
4.1. 로직 블록
4.1.1. read
지정한 '메모리 셀'이나 '메모리 뱅크'에서 지정한 위치의 값을 읽어온다.read 변수 대상_메모리 번지
4.1.2. write
지정한 '메모리 셀'이나 '메모리 뱅크'의 지정한 위치에 값을 기록한다.write 변수 대상_메모리 번지
4.1.3. draw
4.1.4. print
4.1.5. drawflush
4.1.6. printflush
4.1.7. getlink
4.1.8. control
블록의 상태를 변경한다.control 옵션 블록 인수1 인수2 인수3 인수4
옵션에는 enabled, shoot, shootp, configure 가 있다.
'enabled'는 블록의 활성화 여부를 지정한다. 인수로 0을 넣으면 작동이 중지되고[3] 1을 넣으면 다시 작동한다. [4]
'configure'는 설정이 가능한 블록의 설정을 바꾼다. 가령 '''control configure unloader @titanium'''은 지정된 언로더[5] 의 배출 아이템을 티타늄으로 바꾼다.
4.1.9. radar
4.1.10. sensor
블록의 상태를 감지한다.sensor 변수 블록 감지_대상
'감지 대상'에는 보유하고 있는 아이템의 개수부터 활성화 여부 등 정말 다양한 정보가 포함된다.
예를 들어 '''sensor s switch1 @enabled'''라고 작성된다면 해당 블록은 'switch1'의 활성화 여부를 감지해 's'라는 변수에 집어넣는다.
4.1.11. set
4.1.12. op
'좌항'과 '우항'을 '연산'한 결과를 '변수'에 집어넣는다.op 연산 변수 좌항 우항
'연산'의 종류에는 사칙연산, 비교연산, 논리연산, 삼각함수 등이 있다.
4.1.13. end
해당 반복 주기를 끝낸다.end
아래에 아직 실행하지 않은 블록이 있더라도 'end'블록을 만나면 바로 중단하고 다음 타이밍에 다시 처음부터 반복한다.
4.1.14. jump
변수와 값이 조건에 부합한다면 다음 블록 대신 지정한 로직 블록으로 바로 건너뛴다.jump 대상_블록 조건 변수 값
대상 로직 블록을 지정하는 방법은 해당 블록의 순서 번호로, 0부터 센다.
조건에는 'equal, notEqual, lessThan, lessThanEq, greaterThan, greaterThanEq, always'가 있다. 차례대로 '같음, 다름, 보다 작음, 보다 큼, 보다 작거나 같음, 보다 크거나 같음, 무조건'을 의미한다.
예를 들어 '''jump 3 lessThan x 10'''은 'x'가 10보다 작으면 다음블록 대신 4번째 블록을 실행하라는 의미이다.
게임 내에서는 로직 블록의 오른쪽에 보이는 세모를 클릭, 드래그 하여 대상 로직블록을 지정할 수 있다.
4.1.15. ubind
4.1.16. ucontrol
4.1.17. uradar
4.1.18. ulocate
4.2. 사용예
4.2.1. 자동 차단기
위 로직은 'vault1'의 티타늄 보유량을 감지하고, 그것이 300개보다 작으면 'unloader1'을 비활성화, 크면 활성화 한다.sensor t vault1 @titanium
jump 4 lessThan t 300
jump 6 greaterThan t 300
end
control enabled unloader1 0 0 0 0
end
control enabled unloader1 1 0 0 0
end
이를 응용하면 코어에서 자원 뽑아 설금을 제작하는 경우 실리콘이 동나도록 빨아먹지 못하게 막을 수 있다.
[1] 게임 내 클립보드에서 가져오기 기능을 이용하면 된다.[2] 구문의 의미에 따라 자동으로 색을 달리 입혀주는 기능이다[3] 작동이 중지된 블록은 커서를 위에 올려보면 x 표시가 뜬다.[4] 스위치 등 특별한 경우를 제외하고 비활성화 된 블록은 약간의 시간이 지나면 다시 자동으로 활성화된다. 따라서 계속 비활성화 시키고 싶다면 매 반복마다 다시 비활성화를 시켜줘야 한다.[5] 실제 블록 이름은 다를 수 있다.