Screeps 게임 엔진에는 두 가지 변형이 있습니다: 브라우저 기반(Simulation mode)과 서버 기반(online mode)입니다. 시뮬레이션 모드에서 플레이할 때는 여러분의 스크립트가 오직 브라우저에서만 실행됩니다. 시뮬레이션의 게임 API는 서버와 동일하지만, 서버는 게임 계산에 참여하지 않습니다.
반면 온라인 모드에서는 여러분의 스크립트 계산이 브라우저에 어떤 영향도 주지 않으며, 오직 서버에서만 실행됩니다. 이를 유지하기 위해 우리는 게임 서버의 CPU 자원을 사용할 수 있도록 CPU 시간을 제공합니다.
게임 루프, 시간, 틱 이해하기 문서에서 설명했듯이, 게임 프로세스는 게임 반복, 즉 틱(tick) 으로 나뉩니다. 각 틱 동안 게임 엔진은 각 플레이어의 스크립트를 동시에 계산합니다. 이후 계획된 행동들이 실행됩니다. 한 게임 틱의 길이는 고정되어 있지 않습니다. 모든 플레이어의 스크립트가 끝까지 실행된 뒤에야 틱이 종료됩니다.
CPU Limit
실행 시간을 악용하는 행위(이는 모든 플레이어에게 게임 틱의 길이에 영향을 줍니다)를 방지하기 위해, 우리는 CPU 시간 제한(CPU time limit) 개념을 도입했습니다. 이는 한 틱 안에서 여러분의 게임 스크립트가 실행될 수 있는 시간(밀리초)입니다. 예를 들어 CPU 제한이 100이면, 스크립트가 100ms를 실행한 시점에 아직 작업을 끝내지 못했더라도 실행이 종료됩니다. 여러분의 CPU 제한은 (활성 subscription이 있다면) Global Control Level에 따라 달라지며, 그렇지 않으면 20으로 고정됩니다.
Bucket
다만 편의를 위해, 사용하지 않은 제한 시간을 다음 틱으로 이월(rollover)할 수 있습니다. 이를 통해 몇 틱에 한 번씩 리소스를 많이 쓰는 작업을 “버스트(burst)”로 수행할 수 있으며, 이전 틱들에서 자원을 절약해 버킷에 쌓아 두었다면 계정의 CPU 제한을 초과해 사용할 수 있습니다.

어떤 틱에서 스크립트가 계정에 설정된 CPU 기준(baseline) 제한보다 적게 CPU를 사용하면, 그 차이가 누적 버킷에 더해집니다. 최대 10,000 CPU까지 누적할 수 있습니다. 버킷에 누적분이 있다면, 한 틱에서 버킷에 쌓인 양 중 최대 500 CPU까지 사용해 CPU 제한을 초과할 수 있습니다.
예를 들어 계정 제한이 150이고 틱당 100 CPU만 사용한다면, 틱당 50 CPU가 버킷에 쌓입니다. 그러면 5틱마다 한 번 제한을 250 CPU만큼 초과하는 1회 버스트를 수행할 수도 있고, 200틱마다 500 CPU 버스트를 20회 연속으로 수행할 수도 있습니다.
속성 Game.cpu.tickLimit은 누적분을 고려했을 때 현재 틱에서 사용할 수 있는 CPU 양을 나타냅니다. Game.cpu.bucket이 가득 차면, Game.cpu.tickLimit은 500이 됩니다. 이후 누적분을 소진한 뒤에야 감소하기 시작합니다. Game.cpu.tickLimit은 계정 제한보다 작아질 수는 없습니다. 즉, 최소한 Game.cpu.limit 값은 보장됩니다.
따라서 (예: 경로 탐색 같은) 일부 계산을 미뤄두었다가, 제한을 초과해 버스트로 처리할 수 있는 시점에 수행하는 식으로 사용량을 계획할 수 있습니다.