CREATORS // GUIDE
창작자 가이드
업로드 규칙, 세이브 동기화, 선택 SDK(window.altis), AI에게 통합을 맡기는 프롬프트.
업로드 규칙
- zip 하나, 최대 500MB. 브라우저에서 파일 서버로 바로 올라가고, 끊겨도 같은 파일을 다시 고르면 이어서 올라가요. 500MB를 넘으면 텍스처·오디오 압축을 켜고, 안 쓰는 에셋과 디버그용 파일을 빼고 다시 빌드해 보세요.
- 웹 게임: zip 맨 위(루트)에
index.html. RPG Maker MV/MZ, Construct, GDevelop의 HTML5 내보내기, Electron/NW.js 앱(웹 부분만 사용) 모두 돼요. - PC 게임: Unity, Godot, Unreal 등 어떤 엔진으로 만들었든 올릴 수 있어요. 빌드한 폴더를 그대로 zip으로 묶어 주세요. 실행 파일(
.exe)이 zip 맨 위에 있으면 돼요. 설치 프로그램(setup.exe, .msi) 형태만 받지 않고, 지금은 Windows 빌드만 지원해요. - Unity WebGL: 기본 설정으로 빌드한 그대로 올리면 돼요. 압축(Brotli/Gzip)도 그대로 둬도 돼요. 멀티스레드 옵션(threads)을 따로 켠 빌드만 동작하지 않으니, 켰다면 WebGL 빌드 설정에서 꺼 주세요. 기본값은 꺼짐이에요.
- Altis에서 내려받은 배포본(
*_real.exe,altis-manifest.json이 든 zip)을 다시 올리지 마세요. 엔진에서 빌드한 원본 폴더를 압축해 올려야 해요. - 승인되면 웹 게임의
index.html에는 플레이 집계 스크립트가 자동으로 붙고, PC 게임은Game.exe → Game_real.exe로 이름이 바뀌고 같은 이름의 Altis 실행 도우미가 놓여요. 실행 도우미는 첫 실행 때 동의 창을 띄우고, ‘나중에’를 눌러도 게임은 그대로 실행돼요. - 지금은 무료·비영리 게임만 받아요. 결제·광고·후원 유도가 있으면 반려돼요. 심사 신청 때 자가 체크리스트(자격 확인 6문항 + 내용 수위 7항목)를 작성하고, 수위가 ‘과도·직접적’(청소년이용불가 기준)인 항목이 하나라도 있으면 신청할 수 없어요.
세이브 동기화
로그인한 사용자는 세이브가 클라우드에 저장돼 기기 간에 동기화돼요. 유저·게임당 100MB, 최근 3버전 보관. 익명 사용자는 세이브 동기화만 안 되고 플레이는 전부 돼요.
| 엔진 | 자동으로 찾는 세이브 위치 |
|---|---|
| 웹 (SDK 사용) | altis.save/load로 저장한 데이터 (Altis 서버, 슬롯당 64KB) |
| 웹 (SDK 미사용) | 동기화 미지원 (브라우저 저장소에만 남아요) |
| Unity | %USERPROFILE%\AppData\LocalLow\{Company}\{Product} |
| Godot | %APPDATA%\{ProjectName} |
| Unreal | %LOCALAPPDATA%\{Project}\Saved\SaveGames |
| RPG Maker (NW.js) | {game}\save |
자동으로 못 찾으면 업로드 1단계의 세이브 동기화 칸에 직접 적을 수 있고, 비워 두면 ‘세이브 동기화 미지원’으로 승인돼요.
SDK (선택)
웹 게임은 window.altis로 이벤트 기록과 클라우드 세이브를 쓸 수 있어요. 스크립트를 넣을 필요 없이 승인될 때 자동으로 붙어요. SDK를 쓰지 않아도 플레이 횟수·시간은 집계돼요.
// SDK 는 없을 수도 있으니 항상 옵셔널 체이닝
window.altis?.track("level_clear", { level: 3, time_sec: 42.1 });
// 클라우드 세이브 (로그인 시 서버, 익명 시 localStorage → { local: true })
await window.altis?.save("main", { level: 3, hp: 80 });
const save = await window.altis?.load<{ level: number; hp: number }>("main"); // 없으면 {}
// 로그인 여부
const me = window.altis?.user(); // { id, anon_id, logged_in }
if (!me?.logged_in) showHint("로그인하면 세이브가 기기 간 동기화돼요");| 메서드 | 설명 | 제한 |
|---|---|---|
track(name, props?) | 게임 안 이벤트 기록. 큐에 들어가면 true | 이름 64자, props 1KB, 세션당 500회 |
save(slot?, data) | 클라우드 세이브 (로그인 시 서버, 익명 시 브라우저 저장소 → { local: true }) | 슬롯당 64KB, 슬롯명 [A-Za-z0-9_-]{1,32} |
load(slot?) | 세이브 읽기, 없으면 {} | |
user() | { id, anon_id, logged_in } | |
flush() | 큐에 쌓인 이벤트 즉시 전송 |
로컬에서 개발할 때는 @altis/sdk/mock의 installAltisMock()을 쓰면 브라우저 저장소 기반으로 같은 API가 동작해요. 타입은 @altis/sdk 패키지(MIT 공개)에 있어요.
AI에게 통합 맡기기
아래 프롬프트를 게임 코드와 함께 Claude·ChatGPT·Cursor에 붙여 넣으면 세이브·이벤트 연동을 대신 넣어 줘요.
너는 HTML5 게임에 Altis 플랫폼 SDK 를 통합하는 작업을 한다. 규칙:
1. SDK 는 window.altis 로 제공되며 존재하지 않을 수 있다. 모든 호출은 window.altis?. 옵셔널 체이닝으로 감싸고, 없을 때도 게임이 정상 동작해야 한다. 스크립트 태그를 추가하지 마라 (플랫폼이 자동 주입한다).
2. API
- window.altis.track(name: string, props?: object): boolean — 이름은 snake_case 64자 이내, props 는 JSON 직렬화 1KB 이내(초과 시 props 만 버려짐), 세션당 500회.
- window.altis.save(slot?: string, data: object): Promise<{data, updated_at} | {local: true}> — JSON 직렬화 가능, 슬롯당 64KB 이내, 슬롯명 [A-Za-z0-9_-]{1,32} (생략 시 "default").
- window.altis.load<T>(slot?: string): Promise<T | {}> — 없으면 빈 객체.
- window.altis.user(): { id: string|null, anon_id: string, logged_in: boolean }
- window.altis.flush(): void — 큐에 쌓인 이벤트 즉시 전송 (보통 필요 없음).
- 로그인 메서드는 없다. 로그인은 Altis 플레이 페이지가 담당한다.
3. 하지 말 것
- 플레이 세션 시작/종료 이벤트를 직접 보내지 마라 (자동 집계).
- 개인정보(이메일, IP, 기기 식별자)를 props 나 save 데이터에 넣지 마라.
- 매 프레임 track 이나 save 를 호출하지 마라. 세이브는 체크포인트·레벨 클리어·메뉴에서, 최소 5초 간격.
- 게임 시작을 로그인 뒤로 막지 마라. 익명으로도 전부 플레이할 수 있어야 한다.
4. 해야 할 것
- 게임 시작 시 load("main") 으로 세이브를 불러오고, 빈 객체면 새 게임. 실패해도 새 게임으로 진행.
- 기존 localStorage 세이브 코드가 있으면 altis.save/load 로 바꾸되, window.altis 가 없을 때는 기존 localStorage 경로를 그대로 쓴다.
- 의미 있는 진행 이벤트만 track: game_start, level_start {level}, level_clear {level, time_sec, deaths}, game_over {level, score}, ending {id}.
- user().logged_in 에 따라 UI 에 "클라우드 세이브 켜짐" / "로그인하면 세이브가 기기 간 동기화돼요" 안내를 표시.
5. 출력: 바뀐 파일 전체와, 어디에 무엇을 추가했는지 3줄 요약. 새 의존성은 추가하지 마라.심사 기준
목표 심사 기간은 3일이에요. 반려될 때는 아래 사유 중 하나로 안내되고, 다시 신청하는 횟수에는 제한이 없어요.
- 표기보다 실제 수위가 높음 (재작성 요청) — 표기한 수위보다 실제 내용의 수위가 높아요. 자가 체크리스트를 다시 작성해 제출해 주세요.
- 청소년이용불가 기준 해당 (배포 불가) — 청소년이용불가 등급 기준에 해당하는 내용이 있어 Altis에서 배포할 수 없어요.
- 결제·광고·후원 발견 — 게임 안에서 결제·광고·후원 안내가 확인됐어요. 비영리 요건에 맞지 않아요.
- 재산상 이익·손실 구조 발견 — 재산상 이익·손실 구조가 확인되어 사행성게임물 요건에 해당해요.
- 법인·사업자 게임 — 개인·동호회 창작이 아닌 법인·사업자 게임으로 확인됐어요.
- 홍보 목적 — 다른 상품·브랜드 홍보 목적의 게임으로 확인됐어요.
- 저작권·초상권 — 저작권·초상권 침해가 의심되는 요소가 있어요.
- 악성코드 — 보안 검사에서 위협이 탐지됐어요. 빌드 환경을 점검해 주세요.
- 기타 (직접 작성) —
등급분류 면제 대상인지 추가 확인이 필요하면 반려 대신 보류되고, 게임물관리위원회의 확인서를 올리면 심사가 다시 진행돼요.
올린 게임은 Altis에서만 배포돼요. 이용자가 다른 곳에 다시 올리는 것은 금지되며, 게임 상세·다운로드 화면에서 안내해요.