타일셋

타일셋은 Cataclysm: Bright Nights에서 게임 엔티티의 그래픽 표현을 정의합니다. ASCII 디스플레이 대신 게임을 표시하는 데 사용되는 타일(이미지 스프라이트)의 모음입니다.

개요

타일셋은 다음으로 구성됩니다:

  • 타일셋 이미지 - 개별 타일 스프라이트를 포함하는 PNG 파일
  • 구성 파일 - 게임 엔티티를 타일에 매핑하는 JSON 파일
  • 메타데이터 - 타일 크기, 이름, 호환성에 대한 정보

타일셋 구조

일반적인 타일셋 디렉토리 구조:

gfx/
  MyTileset/
    tileset.txt           # 메인 타일셋 구성
    tile_config.json      # 타일 매핑 정의
    tiles.png             # 메인 타일 이미지
    fallback.png          # 대체 타일
    items/                # 아이템 타일용 선택적 서브디렉토리
    monsters/             # 몬스터 타일용 선택적 서브디렉토리
    terrain/              # 지형 타일용 선택적 서브디렉토리

tileset.txt

tileset.txt 파일은 타일셋의 기본 메타데이터를 정의합니다:

{
  "type": "tileset",
  "view_name": "My Custom Tileset",
  "json": [
    { "file": "tile_config.json" }
  ],
  "tiles-new": [
    {
      "file": "tiles.png",
      "tiles": []
    }
  ],
  "tile_info": [
    {
      "width": 32,
      "height": 32,
      "pixelscale": 1
    }
  ]
}

tileset.txt 필드

필드 타입 설명
type string 반드시 "tileset"이어야 합니다.
view_name string 게임 설정에 표시되는 타일셋 이름.
json array 로드할 추가 JSON 구성 파일.
tiles-new array 타일 이미지 파일 정의.
tile_info array 타일 크기 및 스케일 정보.

tile_config.json

tile_config.json 파일은 게임 엔티티가 타일에 매핑되는 방식을 정의합니다:

{
  "tiles-new": [
    {
      "file": "tiles.png",
      "sprite_width": 32,
      "sprite_height": 32,
      "sprite_offset_x": 0,
      "sprite_offset_y": 0,
      "tiles": [
        {
          "id": "t_grass",
          "fg": 0,
          "bg": 0
        },
        {
          "id": "t_dirt",
          "fg": 1,
          "bg": 0
        }
      ]
    }
  ]
}

타일 항목

필드 타입 설명
id string 게임 엔티티 ID (지형, 아이템, 몬스터 등).
fg integer 전경 타일 인덱스 (이미지의 스프라이트 번호).
bg integer 배경 타일 인덱스. 투명의 경우 0.
rotates boolean 선택 사항. true이면 이 타일이 방향에 따라 회전합니다.
multitile boolean 선택 사항. true이면 이 타일이 인접 타일에 연결됩니다.
animated boolean 선택 사항. true이면 이 타일이 애니메이션됩니다.

타일 인덱싱

타일셋 이미지의 타일은 왼쪽에서 오른쪽, 위에서 아래로 0부터 인덱싱됩니다:

32x32 타일을 가진 320x320 이미지의 경우:
 0   1   2   3   4   5   6   7   8   9
10  11  12  13  14  15  16  17  18  19
20  21  22  23  24  25  26  27  28  29
...

타일 인덱스 5는 첫 번째 행의 6번째 타일을 참조합니다.

멀티타일 (연결된 타일)

멀티타일을 사용하면 벽, 펜스 및 기타 연결 구조가 인접한 타일에 부드럽게 연결될 수 있습니다:

{
  "id": "t_wall",
  "multitile": true,
  "fg": 100,
  "bg": 0,
  "additional_tiles": [
    { "id": "center", "fg": 100 },
    { "id": "corner", "fg": [101, 102, 103, 104] },
    { "id": "edge", "fg": [105, 106] },
    { "id": "t_connection", "fg": [107, 108, 109, 110] },
    { "id": "end_piece", "fg": [111, 112, 113, 114] },
    { "id": "unconnected", "fg": 115 }
  ]
}

멀티타일 연결 타입

타입 설명
center 모든 면에 연결.
corner 두 인접 면에 연결 (4개 회전).
edge 한 면에 연결 (4개 회전).
t_connection 세 면에 연결 (4개 회전).
end_piece 반대 면에 연결 (4개 회전).
unconnected 연결 없음.

계절 변형

지형 타일은 계절별 변형을 가질 수 있습니다:

{
  "id": "t_tree_pine",
  "fg": [
    { "season": "spring", "index": 200 },
    { "season": "summer", "index": 201 },
    { "season": "autumn", "index": 202 },
    { "season": "winter", "index": 203 }
  ],
  "bg": 0
}

애니메이션

타일은 여러 프레임을 지정하여 애니메이션할 수 있습니다:

{
  "id": "mon_zombie_brute",
  "fg": [
    { "weight": 1, "sprite": 300 },
    { "weight": 1, "sprite": 301 },
    { "weight": 1, "sprite": 302 }
  ],
  "animated": true,
  "bg": 0
}

애니메이션 필드

필드 타입 설명
animated boolean 애니메이션 활성화.
animation_speed integer 선택 사항. 프레임 사이의 밀리초 수.

가중 변형

단일 ID에 대해 여러 타일 변형을 랜덤하게 선택할 수 있습니다:

{
  "id": "t_grass",
  "fg": [
    { "weight": 50, "sprite": 10 },
    { "weight": 30, "sprite": 11 },
    { "weight": 20, "sprite": 12 }
  ]
}

가중치가 높을수록 해당 변형이 선택될 확률이 높아집니다.

스프라이트 오프셋

타일이 그리드에 완벽하게 정렬되지 않는 경우, 오프셋을 지정할 수 있습니다:

{
  "file": "tall_sprites.png",
  "sprite_width": 32,
  "sprite_height": 64,
  "sprite_offset_x": 0,
  "sprite_offset_y": -32
}

이것은 키가 큰 엔티티(예: 2x1 스프라이트)에 유용합니다.

대체 타일

타일셋은 정의되지 않은 엔티티에 대한 대체 타일을 지정할 수 있습니다:

{
  "id": "unknown",
  "fg": 9999,
  "bg": 0
}

대체가 정의되지 않은 경우 게임은 ASCII 기호를 사용합니다.

오버레이

오버레이는 기본 타일 위에 그려지는 추가 레이어입니다:

{
  "id": "overlay_wielded_knife",
  "fg": 500
}

오버레이는 다음에 사용됩니다:

  • 휘두르는 아이템 (overlay_wielded_<item_id>)
  • 착용한 의복 (overlay_worn_<item_id>)
  • 돌연변이 (overlay_mutation_<mutation_id>)
  • 상태 효과 (overlay_effect_<effect_id>)

타일셋 크기

일반적인 타일 크기:

  • 16x16 - 작은, 레트로 스타일
  • 32x32 - 표준, 가장 일반적
  • 64x64 - 큰, 상세한
  • 혼합 - 일부 타일셋은 다양한 엔티티에 대해 다양한 크기를 사용

모범 사례

  1. 일관된 아트 스타일 - 타일셋 전체에서 일관된 시각적 스타일을 유지하세요.
  2. 적절한 크기 - 지정된 타일 크기에 맞는 스프라이트를 사용하세요.
  3. 투명도 - 배경에는 PNG 알파 채널을 사용하세요.
  4. 조직화 - 타일을 카테고리(지형, 아이템, 몬스터 등)별로 정리하세요.
  5. 명명 - 타일 ID에 명확하고 일관된 명명 규칙을 사용하세요.
  6. 최적화 - 로딩 시간을 위해 이미지 크기를 최적화하세요.
  7. 문서화 - 타일셋 기능 및 호환성을 문서화하세요.

타일셋 테스트

타일셋을 테스트하려면:

  1. 타일셋을 gfx/ 디렉토리에 배치
  2. 게임 실행
  3. 설정 → 그래픽 → 타일셋으로 이동
  4. 타일셋 선택
  5. 게임에서 다양한 엔티티 확인
  6. 누락되거나 잘못 정렬된 타일 확인

호환성

타일셋은 게임 버전과 호환되어야 합니다:

  • 새 게임 엔티티는 타일셋 업데이트가 필요할 수 있습니다
  • 이전 타일셋은 새 콘텐츠에 대해 누락된 타일이 있을 수 있습니다
  • 타일셋 형식은 게임 업데이트에 따라 변경될 수 있습니다

성능 고려사항

  • 이미지 크기: 큰 타일셋은 더 많은 메모리를 사용합니다
  • 타일 수: 더 많은 타일은 더 긴 로딩 시간을 의미합니다
  • 애니메이션: 애니메이션 타일은 CPU 사용량을 증가시킵니다
  • 투명도: 알파 블렌딩은 성능에 약간의 비용이 듭니다

추가 자료

예시 타일셋

Cataclysm: Bright Nights에서 사용할 수 있는 인기 타일셋:

  • MSX++DEAD_PEOPLE - 클래식, 널리 사용됨
  • UltimateCataclysm - 현대적, 상세함
  • ChestHole - 간단함, 명확함
  • MShock - 어두움, 대기감

각 타일셋은 고유한 아트 스타일과 기능을 가지고 있습니다.