본문으로 이동

사용자:Hsl0/llms.txt

리버티게임, 모두가 만들어가는 자유로운 게임
여기는 리버티게임입니다.

리버티게임은 미디어위키를 기반으로 한 자작 게임 사이트입니다. 리버티게임에서는 누구나 게임을 만들고 플레이할 수 있습니다. 리버티게임은 한국어를 사용합니다.

리버티게임의 게임은 대부분 미디어위키에서 사용하는 위키텍스트 마크업 언어를 기반으로 만들어지며, 일부 게임은 CSS나 자바스크립트도 사용합니다. 이 문서 또한 위키텍스트 문법을 사용하였습니다. 만약 위키텍스트 문법을 모른다면, [리버티게임:길라잡이](/index.php?title=%EB%A6%AC%EB%B2%84%ED%8B%B0%EA%B2%8C%EC%9E%84:%EA%B8%B8%EB%9D%BC%EC%9E%A1%EC%9D%B4&page=2) 문서를 참조해 주세요. (위키텍스트를 모르는 모델을 위해 이 부분만 마크다운 링크 문법을 사용합니다.)

리버티게임은 단순히 게임을 배포하는 것을 넘어 게임을 개발하는 방법을 나누는 종합 웹게임 커뮤니티를 지향합니다.

== 주소 ==
지금부터 리버티게임의 주소(URL) 구조를 설명하겠습니다.

=== 도메인 ===
리버티게임은 두 가지의 도메인을 사용합니다. 둘 중 무엇을 사용하여도 상관없으며, 사이트의 컨텐츠와 하위 URL 구조는 완전히 동일합니다. HTTPS 프로토콜 사용을 권장합니다.

* https://libertyga.me
* https://libertygame.work

=== 문서 ===
리버티게임의 기반인 미디어위키는 각각의 페이지를 문서의 형태로 구분합니다. 리버티게임의 문서는 /wiki/(문서명) 경로를 통해 접근할 수 있습니다. 또는, /index.php?title=(문서명) 경로로도 접근 가능합니다. 이러한 경로는 HTML 형태의 컨텐츠를 제공합니다.

예를 들어, [[리버티게임:소개]]는 다음 경로에 존재합니다. 한글로 된 문서명 부분은 URL 인코딩이 필요합니다.
* /wiki/리버티게임:소개
* /index.php?title=리버티게임:소개

=== 원본 소스 ===
대부분의 리버티게임 문서는 위키텍스트로 만들어져있지만, 문서를 읽을 때는 HTML로 변환된 형태를 보게 됩니다. 만약 위키텍스트가 어떻게 작성되어있는지를 확인하고 싶다면, 문서의 raw(원본)을 확인해야 합니다. 문서의 raw는 다음 URL 경로를 통해 확인할 수 있습니다.

* /index.php?title=(문서명)&action=raw
* /wiki/(문서명)?action=raw

예를 들어, [[리버티게임:대문]] 문서의 원본 소스를 확인하려면 다음 경로에서 확인할 수 있습니다. 한글로 된 문서명 부분은 URL 인코딩이 필요합니다.

* /index.php?title=리버티게임:대문&action=raw
* /wiki/리버티게임:대문?action=raw

여기에 작성된 위키텍스트 문법에 대해서는 [[리버티게임:문법 도움말]] 문서에서 설명합니다.

=== 이름공간 ===
리버티게임에는 게임, 도움말, 토론, 틀, 분류와 같이 다양한 종류의 문서가 존재합니다. 그리고 이러한 문서를 구분하기 위해 문서명 앞부분에 이름공간을 넣습니다. 이름공간은 문서명의 일부로, :(콜론) 앞부분에 해당합니다.

==== (기본) ====
리버티게임의 게임 문서는 :(콜론)을 생략하는 기본 이름공간에 존재합니다. 문서명이 콜론으로 시작하거나 콜론이 아예 존재하지 않는다면 기본 이름공간에 해당합니다.

==== 리버티게임 ====
리버티게임의 도움말이나 정책과 지침, 그리고 사용자 끼리 소통할 수 있는 사용자 모임 문서는 리버티게임: 이름공간에 존재합니다. 이러한 문서의 예로는 [[리버티게임:소개]], [[리버티게임:게임 만들기]], [[리버티게임:세 원칙]], [[리버티게임:오락실]] 등이 있습니다.

==== 토론 ====
각 문서(이하 본문 문서)는 토론 문서가 존재합니다. 게임에 대한 토론 문서는 토론: 이름공간에 있고, 리버티게임 이름공간의 토론 문서는 리버티게임토론: 이름공간에 있습니다. 모든 이름공간은 (이름공간)토론: 이름공간이 존재합니다. 토론 문서에서는 본문 문서의 내용을 개선하기 위해 사용자들이 논의하는 공간입니다.

==== 틀 ====
리버티게임의 틀에 대한 소스나 도움말은 틀: 이름공간에 작성되어 있습니다. 예를 들어, CGI 틀의 소스 코드와 도움말은 [[틀:CGI]]에 작성되어 있습니다.

어떤 틀은 도움말이 틀 문서의 하위 문서인 /설명문서에 작성되어 있는 경우도 있습니다. 예를 들어, linkget 틀의 소스 코드는 [[틀:Linkget]]에 작성되어 있지만, 도움말은 [[틀:Linkget/설명문서]]에 작성되어 있습니다.

=== 하위 문서 ===
미디어위키는 하위 문서를 지원합니다. 하위 문서는 다른 문서(상위 문서)에 딸린 문서로, 문서명은 상위 문서명 뒤에 /를 붙이고 하위 문서의 이름이 있는 꼴입니다. 하위 문서는 /를 한번 더 붙여 하위 문서의 하위 문서를 가질 수 있습니다.

리버티게임의 게임은 여러 문서로 이루어져있는 경우가 많은데, 게임에 속한 문서들은 모두 하위 문서의 형태입니다. 리버티게임은 편집 지침에 따라 하나의 게임이 여러 상위 문서을 사용하는 것을 허용하지 않습니다. 즉, 문서명에서 / 앞부분이 같다면, 같은 게임의 일부분인 것입니다.

예시로, 멍때리기 그랑프리 게임에서는 다음과 같은 페이지 이름을 사용할 수 있습니다.
* 멍때리기 그랑프리
* 멍때리기 그랑프리/시작
* 멍때리기 그랑프리/메인
* 멍때리기 그랑프리/메인/예선
* 멍때리기 그랑프리/메인/결승
* 멍때리기 그랑프리/게임오버

=== CGI ===
리버티게임의 일부 문서에서는 URL 파라미터를 받아서 파라미터에 따라 다른 내용을 보여줍니다. 리버티게임에서는 이러한 기능을 CGI 시스템이라고 부릅니다.

CGI 시스템은 상당수의 게임에서 사용되고 있습니다. 이 기능을 응용해 한 문서 안에 여러 페이지를 만들거나, 체력, 경험치, 돈 같은 변수를 저장하기도 합니다. CGI는 위키텍스트로 동적인 문서를 만들어 게임이 될 수 있게 하는 핵심적이고 혁신적인 기술입니다.

CGI와 관련된 위키 문법은 [[#CGI 링크용 틀]] 문단에서 설명합니다.

=== API ===
리버티게임에서 여러 문서를 대량으로 확인해야 할 때, 각 페이지에 대해 일일이 요청을 보내는 크롤링을 하면 서버에 부담을 주고 다른 사용자에게 민폐가 될 수 있습니다. 그 대신에, 여러 문서에 대한 정보를 한번에 효율적으로 얻을 수 있는 API를 사용할 수 있습니다.

리버티게임에서 API는 다음 URL 경로를 통해 사용할 수 있습니다.
* /api.php

리버티게임의 API는 미디어위키를 기반으로 하기 때문에 미디어위키의 API와 동일합니다. /api.php에 그냥 접속하면 리버티게임에서 사용할 수 있는 API에 대한 설명이 있습니다.

==== 게임의 모든 문서 확인 ====
특정한 게임에 대해 모든 문서를 확인하고 싶을 수 있습니다. 이 경우 API를 사용하면 좋습니다. 게임을 구성하는 문서는 모두 하위 문서의 형태를 하기 때문에 접두어찾기를 통해 이러한 문서의 목록을 찾을 수 있습니다. 다음 API URL은 문서 제목이 특정한 접두어로 시작하는 모든 문서에 대한 원본 소스를 불러옵니다. (접두어) 부분에 찾으려는 문서의 접두어를 입력해 주세요. (도메인은 생략됨)

* /api.php?action=query&format=json&prop=revisions&generator=allpages&formatversion=2&rvprop=content%7Ccontentmodel&rvslots=main&gapprefix=(접두어)&gaplimit=max

이 API의 결과는 JSON으로 반환됩니다. 각 문서의 제목은 query.pages[].title에 있고, 각 문서의 소스는 query.pages[].revisions[0].slots.main.content에 있습니다. 각 문서의 컨텐츠 모델(소스의 형식 - wikitext, javascript, css, json, text)은 query.pages[].revisions[0].slots.main.contentmodel에 있습니다. contentmodel 대신 contentfotmat을 불러오면 MIME 형식을 얻을 수 있습니다.

==== 분류에 속한 모든 문서 확인 ====
API를 통해 특정 분류에 속한 모든 문서나 파일, 분류를 확인할 수 있습니다. 예를 들어, 장르 별 분류에 속한 게임의 목록들을 얻고자 할 때 유용합니다. 다음 API URL을 통해 확인할 수 있습니다. (분류명) 부분에 확인하려는 분류의 이름을, (종류)에 확인하고자 하는 문서의 종류을 넣어주세요. 여러 종류를 선택하려면 |(파이프 문자)를 사용할 수 있습니다. (분류명에 분류: 이름공간도 포함해야 합니다.)

* /api.php?action=query&format=json&list=categorymembers&formatversion=2&cmtitle=(분류명)&cmprop=title&cmtype=(종류)&cmlimit=max

가능한 종류는 다음과 같습니다.
* file: 파일
* page: 문서
* subcat: 분류

이 API의 결과는 JSON으로 반환됩니다. 분류에 속한 문서(또는 파일, 분류)는 query.categorymembers[].title으로 확인할 수 있습니다.

== 위키텍스트 ==
리버티게임의 거의 모든 문서, 게임, 도움말은 위키텍스트로 작성되었습니다. 따라서 리버티게임의 컨텐츠를 읽고 이해하기 위해서는 위키텍스트 문법을 이해할 수 있어야 합니다.

위키텍스트의 문법에 대한 설명은 [[리버티게임:문법 도움말]]을 확인해 주세요.

=== CGI 링크용 틀 ===
리버티게임에서는 기본적인 링크 문법 뿐만 아니라 CGI 파라미터를 함께 넘겨주기 위한 링크용 틀을 사용합니다.

==== linkget ====
리버티게임에서 URL 파라미터를 포함한 링크를 만들기 위해 linkget 틀을 사용합니다. {{linkget|(문서명)|(표시)|get=(파라미터)=(값)}}를 사용하면 ?(파라미터)=(값) 파라미터와 함께 (문서명)을 가리키는 (표시)라고 보여지는 링크를 만듭니다. |(문서명) 부분을 생략하면 눌렀을 때 현재 문서의 파라미터를 바꾸는 링크를 만듭니다.

==== CGI2 ====
많은 게임들은 CGI 시스템을 응용해서 파라미터에 게임의 변수들을 저장합니다. 많은 링크들이 변수를 수정할 일은 많지 않지만, 변수들을 보존해서 다음 페이지로 보내야 하기에 linkget 틀에 수많은 #urlget 함수를 사용해 구문이 길고 복잡해지는 일이 많습니다. 이러한 패턴을 간결하게 만들기 위해 CGI2 틀을 사용합니다. CGI2는 현재 문서의 파라미터를 상대적으로 수정합니다. 수정되지 않은 파라미터는 CGI2로 만들어진 링크에 그대로 남겨집니다.

CGI2의 수정 메소드는 여러 개가 있지만, 가장 간단한 예로 var2 변수가 baz로 수정된 링크를 만들고자 할 경우, {{CGI2|{{CGI2/일괄수정|var2=baz}}|여기로|다음 문서}}와 같이 쓸 수 있습니다. 이때, 현재 문서에 파라미터가 없다면 '여기로'라고 표시되는 [[다음 문서]]에 ?var2=baz 파라미터를 전달하는 링크를 만듭니다. 만약에 현재 문서에 ?var1=foo&var2=bar 파라미터가 존재한다면, [[다음 문서]]에 ?var1=foo&var2=baz 파라미터를 전달하는 링크를 만듭니다. |다음 문서 부분을 생략하면 현재 페이지의 변수를 바꾸는 링크를 만듭니다.

CGI2는 현재 문서의 파라미터를 읽어들이는 데 사용할 수도 있습니다. #urlget과는 달리, 한글 등 URL 인코딩된 값도 자동으로 변환해주기 때문에 편리합니다. {{CGI2|변수=(변수명)}}과 같이 쓸 수 있습니다.

자세한 사용법은 [[틀:CGI2]]에서 확인할 수 있습니다.

==== CGI ====
urlget 함수와 linkget 틀이 나오기 전에는 구형 CGI 틀을 사용했습니다. 이 시스템이 CGI라고 불리는 이유는 이 틀의 이름이 CGI였기 때문이라는 역사적인 이유 때문입니다. 이 틀은 오직 offset 파라미터만을 다루며, 기본적으로 담긴 값은 숫자라고 가정합니다. {{CGI}}라고 쓰면 해당 위치에 offset 파라미터에 담긴 값으로 치환합니다. 만약 offset 파라미터가 존재하지 않으면 0으로 치환됩니다. CGI 틀로 offset 파라미터가 있는 링크를 생성할 수 있습니다. {{CGI|(값)|(보여질 글)|page=(페이지)}}라고 작성하면 (보여질 글)이라고 표시되고 누르면 ?offset=(값) 파라미터와 함께 (페이지) 문서로 이동하는 링크를 만듭니다. |page=(페이지) 부분을 생략하면 눌렀을 때 현재 문서의 파라미터를 바꾸는 링크를 만듭니다.

== 주요 링크 ==
* [[리버티게임:소개]]: 리버티게임 사이트에 대한 소개
* [[리버티게임:도움말]]: 리버티게임의 모든 도움말 문서
** [[리버티게임:게임 만들기]]: 리버티게임에서 게임을 만들기 위한 가이드. 게임 구현을 위한 일반적인 패턴이 있음.
** [[리버티게임:자바스크립트 게임 만들기]]: 리버티게임에서 자바스크립트를 사용하는 가이드 및 유의사항
* [[리버티게임:정책과 지침]]: 리버티게임의 모든 정책과 지침 문서
** [[리버티게임:편집 지침]]: 게임 제작에 권장되는 사항. 게임 구현을 위한 일반적인 패턴이 있음.
* [[:분류:리버티게임]]: 리버티게임의 모든 게임의 목록
* [[리버티게임:추천 게임]]: 커뮤니티가 선정한 리버티게임 대표 게임. 게임 개발에 참고하기 좋은 모범 사례.

== 장르 별 분류 ==
* [[:분류:도로 기행 게임]]
* [[:분류:롤플레잉 게임]]
* [[:분류:멀티플레이 게임]]
* [[:분류:보드 게임]]
* [[:분류:스포츠 게임]]
* [[:분류:시간 낭비하기 게임]]
* [[:분류:시뮬레이션 게임]]
* [[:분류:액션 게임]]
* [[:분류:어드벤처 게임]]
* [[:분류:예언 게임]]
* [[:분류:오픈 월드 게임]]
* [[:분류:음악 게임]]
* [[:분류:전략 게임]]
* [[:분류:철도 교통 게임]]
* [[:분류:캐주얼 게임]]
* [[:분류:퀴즈 게임]]
* [[:분류:탈출 게임]]
* [[:분류:퍼즐 게임]]
* [[:분류:함정 피하기 게임]]

== 텍스트 게임 ==
리버티게임의 게임들은 대부분 일반적인 게임들과는 다릅니다. HTML로 변환되는 위키텍스트 문서들의 형태이며, 이러한 문서들이 하이퍼링크를 타고 오고가는 형태입니다.

각 게임의 최상위 문서는 게임의 첫 문서입니다. 이 문서는 게임에 대한 간단한 소개, 게임의 목표 및 규칙, 게임의 배경을 설명합니다. 그리고 게임을 시작하는 버튼(링크)나, 다음 단계로 이동하는 링크가 존재합니다. 간혹 첫 문서부터 여러 선택지의 링크가 존재할 수 있습니다.

두번째 문서부터는, 여러 선택지들이 나열됩니다. 이러한 선택지들은 각각의 문서를 가리키는 링크입니다. 이러한 링크를 타고 이동하다 보면은 게임의 엔딩에 도달하거나 게임 오버 페이지가 뜨게 될 것입니다.

이러한 텍스트 게임의 구조를 파악하기 위해서는 각 문서와의 링크 관계를 파악해서 스토리 분기를 분석해야 합니다. 특히, 일부 게임은 CGI를 이용해 한 문서를 여러 페이지로 나누었을 수 있으니 주의가 필요합니다. 이러한 게임은 #switch 문법을 주로 사용하는데, 이 문법이 어떤 파라미터에 의해 내용이 달라지는지를 파악해서 각 링크가 파라미터를 무엇으로 바꾸는지와 switch의 케이스를 서로 대조할 필요가 있습니다.

== 게임 기획 ==
최근 만들어진 게임에는 게임 기획이 있습니다. 일반적으로, 각 게임의 최상위 문서에서 '<!--기획'으로 시작하고 '-->'으로 끝나는 주석 안에 게임에 대한 기획안이 존재합니다. 주석에 작성되기 때문에 원본 소스에서만 확인할 수 있습니다. 다만, '기획'이 아닌 '방법'이나 '규칙'같은 다른 단어를 사용하거나, 주석이 아닌 하위 문서와 같은 다른 곳에 기획을 작성할 수도 있습니다. 게임 기획을 통해 게임의 컨셉과 시놉시스를 모든 페이지를 크롤링하지 않고도 확인할 수 있습니다.

== 게임 메타데이터 ==
각 게임에는 /game.json이라는 하위 문서에 게임에 대한 메타데이터를 저장합니다. 이 메타데이터는 JSON 형식으로 저장되며, 이 메타데이터에는 게임의 장르, 완성도, 간단한 설명 등이 포함됩니다. 이 메타데이터를 참조하면 게임의 모든 내용을 크롤링하지 않고도 필요한 정보를 얻을 수 있습니다.

이 메타데이터의 규격은 [[리버티게임:게임 메타데이터]]에, 스키마는 [/index.php?title=%EB%A6%AC%EB%B2%84%ED%8B%B0%EA%B2%8C%EC%9E%84:%EA%B2%8C%EC%9E%84_%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0/%EC%8A%A4%ED%82%A4%EB%A7%88.json&action=raw]에 저장되어 있습니다.

== 플러그인 ==
어떤 게임은 자바스크립트를 사용해 일반적인 게임과 유사한 모습을 보여줍니다. 원래 미디어위키는 사용자가 임의의 자바스크립트를 문서에 로드하는 것을 허용하지 않지만, 리버티게임은 플러그인이라는 시스템을 통해 어떤 문서에서든 사용자가 만든 자바스크립트를 로드할 수 있습니다.

리버티게임의 플러그인은 1세대인 플러그인 틀과, 2세대인 PluginX 틀이 존재합니다.

리버티게임에서 플러그인을 비롯한 스크립트를 작성하는 방법은 [[리버티게임:자바스크립트 게임 만들기]] 문서를 참고해 주세요.

=== 1세대 플러그인 ===
1세대 플러그인은 복잡한 형태의 위키텍스트 문서에 자바스크립트를 작성합니다. 그리고 {{플러그인|(문서명)}}과 같은 틀 문법을 사용해서 문서에 플러그인을 로드합니다. 사용자가 플러그인을 포함한 문서에 접속하였을 때, 플러그인 시스템은 자바스크립트 소스와 수정한 사용자, 날짜를 보여주고 사용자의 동의를 구합니다. 사용자가 동의하였을 때, 자바스크립트 소스는 사용자:(계정명)/common.js 문서에 추가됩니다. 미디어위키 시스템은 자신의 common.js 문서의 자바스크립트를 자동으로 실행합니다. 한번 동의를 받은 플러그인은 같은 플러그인을 사용하는 문서에서 다시 동의를 구하지 않고 자동으로 실행됩니다.

=== 2세대 PluginX ===
2세대 PluginX는 자바스크립트 소스만을 담은 자바스크립트 문서를 작성합니다. 이 문서는 컨텐츠 모델이 javascript로 되어있어 위키텍스트가 적용되지 않습니다. 그리고 {{PluginX|문서=(문서명)}}과 같은 틀 문법을 사용해서 문서에 플러그인을 로드합니다. 사용자가 플러그인을 포함한 문서에 접속하였을 때, PluginX 시스템은 자바스크립트 코드와 수정한 사용자, 날짜를 보여주고 사용자의 동의를 구하는 모달창을 띄웁니다. 사용자가 거부하면 모달창만 닫히고, 동의하면 PluginX 시스템이 동적으로 스크립트를 실행합니다. 사용자는 다시 묻지 않기 옵션을 선택할 수 있습니다. 다시 묻지 않고 거부하면 다시는 해당 스크립트에 대한 동의 창을 띄우지도 않을 것이며, 승인하면 동의 창을 띄우지 않고 바로 스크립트를 실행합니다.