DSPTool 시드스캐너

조건(Conditions), 스캔 방법(Method), 오른쪽 흰 상자 결과창으로 나뉨

먼저 알아야 할 부분

1. 조건문은 위에서 아래 순서대로
2. ConditionType 설정에 따라 시드 내 모든 항성/행성을(시작성계 대상인 BirthXXX들은 시작성계 항성/행성만. 전체보다 빠름) 불러와서 리스트에 때려박아 넣고
3. 얘네를 가지고 Property 부터 GasItem 까지 각종 설정한 속성 조건대로 테스트해 맞지 않는 항성/행성은 리스트에서 지우고
4. 마지막에 하나라도 남아 있으면 참(스캐너에 걸림), 없으면 거짓(원하는게 없으니 안걸림)을 반환한다


변칙
**ReuseMatches 체크는 바로 위 조건에 살아남은 항성/행성을 재사용한다 (즉 AND처럼 작동한다)
**Star 조건 바로 다음에 이어 Planet+ReuseMatches 조건이 오면 앞 Star 조건과 일치한 모든 항성의 행성들을 대상으로 한다
**순서를 뒤집어서 Star 다음 Planet+ReuseMatches 다음 Star+ReuseMatches 같은 조합은 되도록 쓰지 말 것 (테스트 안 해봄)

[Conditions - 조건 설정]

1. Enabled = 체크하면 활성화
비슷한 타겟 조건 여러개 만들어놓고 편하게 껐다켰다

2. ConditionType = 필터링할 대상
BirthStar = 시작성계 항성
BirthStarPlanets = 시작성계 항성에 딸린 행성들(=시작성계에 있는 행성들)
BirthPlanet = 시작행성
Star = 항성
Planet = 행성
SpecificStar = Operator, Value 제외 다른 설정 무시. 항성 ID로 특정 항성을 직접 지정한다 (64개 기준 항상 64번이 블랙홀임)
SpecificPlanet = 위와 같으나 행성이 대상 (항상 6401번이 블랙홀에 딸린 행성임)
**Count = 특수타입. 조건과 일치하는 항성/행성 갯수를 직접 Operator대로 세서 여기에 일치해야 조건이 참이 된다

3. Property = 살펴볼 속성
None = Count 전용. 얘는 살펴볼 속성이 없기 때문
- 이하 항성을 대상으로 쓰면 해당 항성계의 모든 행성을 합산해서 계산, 행성을 대상으로 쓰면 행성 개별로 계산 -
Ocean = 바다 유형. EQ/NEQ Operator, OceanType과 조합

** 항성 대상으로 쓰면 해당 성계 내 해당 바다가 있는 행성 갯수를 셈

Veins = 광맥 갯수. !! 정확한 자원량 말고, 시드뷰어 스케치 모드로 나오는 값임 !! Operator, Value, VeinType과 조합
GasItems = 거대행성의 자원. GasItem에 지정한 자원이 나오는 거대행성이 있는가?

** 항성 대상으로 쓰면 해당 성계 내 조건을 만족하는 거대행성 갯수를 셈

Singularity = 해당 행성의 특이점. Operator, Value와 조합. 행성 대상인 경우 EQ = 해당 특이점 있음, NEQ = 없음. Singularity = TidalLocked(조석고정), TidalLocked2(궤도공명1:2), TidalLocked4(1:4), LaySide(수평자전), ClockwiseRotate(역자전), MultipleSatellites(다위성)

** 항성 대상으로 쓰면 해당 성계 내 지정한 특이점이 있는 행성 갯수를 셈

- 이하 항성 대상 전용 -
DistanceLY = 시작항성부터의 거리(광년). Operator, Value와 조합
StarType = 항성 타입. EQ/NEQ Operator, Value와 조합. Value = MainSeqStar(주계열성), GiantStar(거성), WhiteDwarf(백왜), NeutronStar(중성자), BlackHole(블랙홀)
Spectr = 분광형. Operator, Value와 조합. Value = M, K, G, F, A, B, O, X
Luminosity = 광도. Operator, Value와 조합
PlanetCount = 항성에 딸린 (거대포함)행성 갯수. Operator, Value와 조합
SafetyFactor = 해당 성계 안전도(?) - 낮을수록 AI 행동이 다양해짐. Operator, Value(0에서 1)와 조합. 시드뷰어에서 확인 가능
InitialHives = 해당 성계 최초 생성시에 존재하는 Dark Fog Hive 검은 안개 군락 갯수. Operator, Value와 조합
MaxHives = 해당 성계에 존재 가능한 Dark Fog Hive 검은 안개 군락 최대치. Operator, Value와 조합
(전투관련 속성이 더 없는 이유는 맵젠시에 확인되는 부분이 이게 다라서..)
- 이하 행성 대상 전용 -
SphereEnclosed = 해당 행성이 스피어 내에 가둬짐. Operator, Value와 조합. EQ 1 = 가둬짐, EQ 0 = 못가둠
PlanetTypeString = 해당 행성의 타입. EQ/NEQ Operator, Value와 조합. Value = 시드뷰어 행성리스트 Type에 표시되는 이름 그대로 한국어면 한국어로, 영어면 대소문자 무시하고 영어로 쓰면 됨. NEQ 황무지 사막 적으면 그 초반에 ㅄ같은 풍력 없는 행성 거르는 식으로 응용함

Satellites = 해당 행성의 위성 갯수를 셈. Operator, Value와 조합


4. Operator = 연산자
== EQ (같음)
!= NEQ (같지 않음)
< LT
<= LE
>= GE
> GT

5. Value = 값
대부분은 숫자로 적으면 된다. 특정 Value가 필요한 속성들(잘못 적으면 스캐너 바로 멈춤)은 위의 속성 설명에 적어둠


6. VeinType = 광맥 유형
Crysrub = 유기결정, Bamboo = 가시형석순, Mag(net) = 단극자석
**Max = 모든 광맥 유형이 전부 Operator, Value와 일치해야 함. 모든 광맥 있는 성계 찾기에 쓴다 (Star/Veins/GT/0/Max/... = 성계 내에 각 광맥이 어딘가에 하나씩은 있음)

7. OceanType = 바다 유형 (생략)
8. GasItem = 거대행성 자원 유형 (생략)

9. ReuseMatches = 이 조건 바로 위 조건에 살아남은 항성/행성을 재사용한다 (서두에 설명)


예)
Star/DistanceLY/LE/5/.../ReuseMatches 체크안함
Star/Spectr/EQ/O/.../ReuseMatches 체크
이렇게 하면 5광년 이내에, O형 항성이 있으면 참인 조건이 된다

여기에 하나 더 추가해서
Star/DistanceLY/LE/5/.../ReuseMatches 체크안함
Star/Spectr/EQ/O/.../ReuseMatches 체크
Star/Veins/GT/0/Max/.../ReuseMatches 체크
이렇게 하면 5광년 이내에, O형 항성이 있고, 그 성계에 모든 자원 광맥이 0개 초과하면(=1개라도 있으면) 참이다


살짝 꼬아서


Star/DistanceLY/LE/5/.../ReuseMatches 체크안함
Star/Spectr/EQ/O/.../ReuseMatches 체크
Star/Veins/GT/0/Max/.../ReuseMatches 체크안함
이렇게 하면 5광년 이내에 O형 항성이 있고, 시드 어딘가에 거리나 분광형을 무시하고 모든 자원 광맥이 0개 초과인 성계가 있으면 참이다


[Method - 스캔 방법 설정]

각 방법 이름에 클릭해서 어떤 스캔 방법을 쓸지 고른다
Range = 시드번호 왼쪽부터 오른쪽까지 전부 스캔
Random = 랜덤으로 n개 시드를 골라 스캔. 스캔했던 시드는 성능을 위해 따로 저장하지 않으므로 극단적인 경우 중복이 생길 수 있다
Until Matches = 조건과 일치하는 시드 n개를 찾을 때까지 랜덤 시드를 무한히 스캔. 아예 불가능한 조건이어도 직접 중단할 때까지 계속 돌아가니 주의
List = Browse를 눌러 임의로 작성했거나 이전 스캔 결과를 복붙해둔 텍스트 파일을 불러와 해당 시드들만 가지고 스캔. 널럴한 조건으로 한번 돌린 결과를 저장해두고, 그 안에서 다시 빡세게 원하는 조건을 찾아낼 때 유용하다

[결과창]

조건과 일치하는 시드를 찾으면 찾는 순서대로 결과창에 하나씩 등록된다
아래 Sort를 눌러 작은 시드번호가 위로 오게 정렬하거나, Copy로 텍스트 리스트로 복사할 수 있다
결과창에 있는 시드번호를 더블클릭하면 시드뷰어인 Universe탭으로 연결되어 해당 시드 디테일을 바로 볼 수도 있다
(스캔 도중에는 시드뷰어 자체도 실행시간이 꽤 걸리니 미리 Universe탭 Sketch Only에 체크해두길 권장)


[조건문 작성 팁]


스캔하면서 각 시드를 실제로 생성하는데, 순서가

시작성계 항성+행성

필요하면 시작성계의 광맥

필요하면 전체 항성+행성(광맥 등 세부사항 제외, 시작성계 밖 항성/행성이 하나라도 필요하면 한 번에 전체 항성+행성까지 생성해야 함)

필요하면 행성의 세부사항

순으로 아래까지 갈수록 느려지기 때문에


시작성계 대상 조건들(BirthXXX)을 맨 위로

다음에 가장 단순하면서 결과값이 적을 것 같은 조건

다음에 항성 대상 조건

다음에 행성 대상 조건 순으로 배치하면 훨씬 빨라진다


예)

시작성 다위성인 5광년 내 모든 광맥 있는 성계를 찾는다면. 가장 빠른 순서는 다음과 같다.

1. BirthStarPlanets/Singularity/EQ/MultipleSatellites

-- 시작성계만 만들어서 다위성 아니면 뒤까지 보1지 않고 넘긴다

2. Star/DistanceLY/LE/5 + ReuseMatches

-- 5광년 초과 항성은 거리를 봐야 하니 전체 우주 생성은 하지만 위치만 잡는다

3. Star/Veins/GT/0/Max + ReuseMatches

-- 결과적으로 5광년 이내만 광맥 수를 생성하게 된다


자동 최적화 안 만들어서 미안하다. 경우의 수 다 생각하려니까 대가리 저려서 안 했다..


==============================

개발자특) 설명서 못씀 써도 ㅈ같이밖에 못씀

그래도 예제랑 같이 하나씩 짚으면서 읽어보면 이해되길 바란다
졸다가 틀린 부분, 애매한 설명, 기능추가 등 피드백 환영