동일한 레벨의 포탑을 합성해 더 강한 포탑으로 키우고, 몰려오는 적으로부터 성을 지키는 웹 기반 머지 디펜스 게임입니다. 별 등급, 속성, 장비, 스킬, 업그레이드를 조합해 최대한 오래 생존하는 것이 목표입니다.
https://mergedefense.netlify.app/
- 드래그 앤 드롭 머지: 같은 레벨의 포탑 두 개를 겹치면 한 단계 높은 포탑으로 합성됩니다.
- 랜덤 성장 요소: 포탑은 생성될 때 별 등급과 속성을 확률적으로 얻고, 적도 생존 시간에 따라 속성을 획득합니다.
- 전략적인 배치: 포탑을 보드에 배치하면 자동으로 적을 공격하고, 다시 하단 보관함으로 회수할 수 있습니다.
- 개별/전체 업그레이드: 포탑별 공격 속도, 공격력, 사거리, 최대 체력을 강화하거나 전체 포탑 능력치를 올릴 수 있습니다.
- 장비 시스템: 적 처치 시 드랍되는 장비를 장착하거나 같은 장비끼리 합성해 효과를 키울 수 있습니다.
- 속성 구슬 & 대장간: 대기 중인 포탑을 분해해 속성 구슬을 얻고, 대장간에서 구슬 3개씩 조합해 새로운 속성을 만들 수 있습니다. 속성 설명과 실제 전투 효과는 공통 설정을 기준으로 동작합니다.
- 액티브 스킬: 포격, 빙결파, 골드러시, 응급 수리, 소환 지연으로 위기 상황을 돌파할 수 있습니다.
- 저장/복원: 개인 플레이와 팀 플레이 모두 새로고침 후 진행 상태를 복원합니다. 게임 중
포기하기를 누르면 저장된 진행 상황을 지우고 종료합니다. - 팀 플레이(방 시스템): 초대코드와 선택적 비밀번호로 방을 만들고 참가해, 골드를 제외한 포탑/업그레이드/성 체력/적 웨이브를 함께 공유하는 협동 모드를 즐길 수 있습니다. 관전을 허용한 방은 초대코드 없이 게스트가 구경할 수 있습니다.
- 랭킹 지원: Supabase 설정 시 생존 시간이 랭킹에 저장되고 시작 화면에서 확인됩니다.
- 시작 화면에서 닉네임을 입력하고
start를 누릅니다. - 하단의
생성버튼으로 포탑을 만듭니다. 생성 비용은 현재 생성 레벨에 따라 증가합니다. - 같은 레벨의 포탑을 드래그해 겹치면 더 높은 레벨의 포탑으로 합성됩니다.
- 포탑을 상단 보드로 드래그하면 설치됩니다. 설치된 포탑은 사거리 안의 적을 자동 공격합니다.
- 설치된 포탑을 클릭하면 업그레이드, 타게팅 우선순위, 장비 장착을 관리할 수 있습니다.
- 하단
create-bar상단 핸들을 드래그하면 보관함 높이를 조절할 수 있습니다. - 적이 성에 도달하면 성 체력이 감소합니다. 성 체력이 0이 되면 게임이 종료됩니다.
포탑은 레벨, 별 등급, 속성, 장비, 업그레이드 상태를 가집니다.
- 별 등급은 1성부터 5성까지 있으며, 높은 별일수록 공격력과 체력이 크게 증가합니다.
- 생성 시 기본 확률로 1~4성이 등장하고, 5성은 타임 재화를 사용한 성급 업그레이드로 도달합니다.
- 머지할 때 두 재료 중 더 높은 별 등급이 결과 포탑에 계승됩니다.
- 설치된 포탑은 시간이 지날수록
타임을 얻고, 적 처치 시 추가 타임을 얻습니다. - 타임은 포탑 개별 업그레이드와 성급 업그레이드에 사용할 수 있습니다.
- 타워의 타임은 원하는 수량만큼
1T당 20골드를 지불해 개인 T 보관함으로 회수할 수 있습니다. - 개인 T 보관함의 타임은 다른 타워에 원하는 수량만큼 무료로 주입할 수 있습니다.
- 201레벨 이상의 포탑은 대형 타워가 되어 공격력과 최대 체력이 2배가 되고 화면에서 1.2배 크게 표시됩니다.
- 포탑을 설치 영역과 대기 보관함 사이에서 이동해도 개별 강화 수치, 타임, 성급, 속성, 장비와 현재 체력이 유지됩니다.
- 공격 속도 업그레이드는 실제 최소 공격 간격에 도달하면 더 이상 구매할 수 없습니다.
포탑은 일정 확률로 특수 속성을 얻습니다. 조합법은 README에 공개하지 않지만, 각 속성의 효과는 아래에서 모두 확인할 수 있습니다.
전체 속성 효과 보기
| 속성 | 효과 |
|---|---|
| 힘 | 공격력이 2배가 됩니다. |
| 피 | 공격력이 50% 감소합니다. 준 피해의 10%만큼 성 체력을 회복합니다. |
| 공 | 공격 속도가 2배 빨라집니다. 타격 시 10% 확률로 적을 3성으로 강화시킵니다. |
| 벽 | 공격 시 적을 3초간 정지시킵니다. 공격 속도가 2배 느려집니다. |
| 물 | 공격 시 적의 이동 속도를 3초간 50% 감소시킵니다. |
| 불 | 공격 시 1초마다 공격력의 25%씩 3회(총 75%) 화상 피해를 입힙니다. |
| 폭탄 | 공격 시 반경 130 내 적에게 공격력의 70%만큼 피해를 줍니다. |
| 빙결 | 공격 시 적을 1초간 얼리고, 이후 3초간 이동 속도를 50% 감소시킵니다. |
| 지옥불 | 공격 시 1초마다 공격력의 38%씩 5회(총 188%) 화상 피해를 입힙니다. 공격 시 5초간 적의 회복 효과를 막습니다. |
| 핵폭발 | 공격 시 반경 390 내 적에게 공격력의 70%만큼 피해를 줍니다. 공격 속도가 2.5배 느려집니다. |
| 광속 | 공격 속도가 4배 빨라집니다. 타격 시 10% 확률로 적을 3성으로 강화시킵니다. |
| 거인 | 공격력이 2.5배가 됩니다. 공격 속도가 1.15배 느려집니다. |
| 감옥 | 공격 시 적을 1.2초간 정지시킵니다. 둔화/정지 중인 적에게 1.5배 피해를 줍니다. |
| 흡혈귀 | 공격력이 50% 감소합니다. 준 피해의 25%만큼 성 체력을 회복합니다. 성 체력이 낮을수록 회복량이 최대 2배까지 증가합니다. |
| 증기폭발 | 공격 시 적의 이동 속도를 2.1초간 35% 감소시킵니다. 공격 시 1초마다 공격력의 10%씩 2회(총 20%) 화상 피해를 입힙니다. 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. |
| 열탕 | 공격 시 적의 이동 속도를 3초간 35% 감소시킵니다. 공격 시 1초마다 공격력의 18%씩 3회(총 54%) 화상 피해를 입힙니다. 공격력이 1.7배가 됩니다. |
| 냉각장벽 | 공격 시 적의 이동 속도를 2.1초간 35% 감소시킵니다. 공격 시 적을 2.1초간 정지시킵니다. 공격 시 1초마다 공격력의 18%씩 3회(총 54%) 화상 피해를 입힙니다. 둔화/정지 중인 적에게만 적용됩니다. |
| 생명증기 | 공격 시 1초마다 공격력의 18%씩 3회(총 54%) 화상 피해를 입힙니다. 지속 피해의 7%만큼 성 체력을 회복합니다. |
| 물폭풍 | 공격 시 범위 내 적의 이동 속도를 2.1초간 35% 감소시킵니다. 공격 속도가 1.54배 빨라집니다. |
| 해일 | 공격 시 적의 이동 속도를 3초간 35% 감소시킵니다. 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 공격력이 1.7배가 됩니다. |
| 홍수 | 공격 시 적의 이동 속도를 2.1초간 35% 감소시킵니다. 공격 시 적을 2.1초간 정지시킵니다. |
| 흡수파도 | 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 준 피해의 7%만큼 성 체력을 회복합니다. 맞은 적 수에 따라 최대 5배까지 증가합니다. |
| 칼날비 | 공격 시 적의 이동 속도를 1.5초간 25% 감소시킵니다. 공격 속도가 1.54배 빨라집니다. 둔화/정지 중인 적에게 1.35배 피해를 줍니다. |
| 시간감옥 | 5회 공격마다 공격 시 적을 2.1초간 정지시킵니다. 공격 속도가 1.54배 빨라집니다. |
| 피의 비 | 공격 시 적의 이동 속도를 2.1초간 35% 감소시킵니다. 공격 속도가 1.54배 빨라집니다. 준 피해의 5%만큼 성 체력을 회복합니다. |
| 빙벽 | 공격 시 적의 이동 속도를 2.1초간 35% 감소시킵니다. 공격 시 적을 2.1초간 정지시킵니다. 공격력이 1.7배가 됩니다. |
| 냉혈 | 공격 시 적의 이동 속도를 1.5초간 25% 감소시킵니다. 둔화/정지 추가 피해의 7%만큼 성 체력을 회복합니다. 둔화/정지 중인 적에게 1.35배 피해를 줍니다. |
| 생명의 늪 | 공격 시 범위 내 적의 이동 속도를 2.1초간 35% 감소시킵니다. 준 피해의 7%만큼 성 체력을 회복합니다. 맞은 적 수에 따라 최대 5배까지 증가합니다. |
| 연쇄폭발 | 공격 속도가 1.54배 빨라집니다. 처치 시 반경 137에 공격력의 35%만큼 연쇄 폭발 피해를 줍니다. |
| 화산 | 공격 시 1초마다 공격력의 18%씩 3회(총 54%) 화상 피해를 입힙니다. 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 보스(5의 배수 레벨)에게 화상 피해가 1.42배가 됩니다. |
| 지뢰장벽 | 공격 시 적을 2.1초간 정지시킵니다. 공격 시 1초마다 공격력의 15%씩 3회(총 45%) 화상 피해를 입힙니다. 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 둔화/정지 중인 적에게 화상 피해가 1.35배가 됩니다. |
| 피폭발 | 공격 시 1초마다 공격력의 18%씩 3회(총 54%) 화상 피해를 입힙니다. 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 준 피해의 5%만큼 성 체력을 회복합니다. 맞은 적 수에 따라 최대 5배까지 증가합니다. |
| 광전사 | 공격력이 1.7배가 됩니다. 공격 속도가 1.54배 빨라집니다. 타격 시 10% 확률로 적을 3성으로 강화시킵니다. |
| 화염사슬 | 35% 확률로 공격 시 적을 2.1초간 정지시킵니다. 공격 시 1초마다 공격력의 15%씩 3회(총 45%) 화상 피해를 입힙니다. 정지된 적에게만 적용됩니다. 공격 속도가 1.54배 빨라집니다. |
| 흡혈화염 | 공격 시 1초마다 공격력의 18%씩 3회(총 54%) 화상 피해를 입힙니다. 공격 속도가 1.54배 빨라집니다. 지속 피해의 5%만큼 성 체력을 회복합니다. |
| 용암 | 공격 시 적을 2.1초간 정지시킵니다. 공격 시 1초마다 공격력의 12%씩 3회(총 36%) 화상 피해를 입힙니다. 공격력이 1.7배가 됩니다. 공격 속도가 1.5배 느려집니다. |
| 피의 불꽃 | 공격 시 1초마다 공격력의 18%씩 3회(총 54%) 화상 피해를 입힙니다. 공격력이 1.7배가 됩니다. 지속 피해의 5%만큼 성 체력을 회복합니다. |
| 제물의 벽 | 공격 시 적을 2.1초간 정지시킵니다. 공격 시 1초마다 공격력의 18%씩 3회(총 54%) 화상 피해를 입힙니다. 처치 시 적 최대 체력의 4%만큼 성 체력을 회복합니다. 둔화/정지 중인 적 처치 시에만 적용됩니다. |
| 탄막 | 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 공격력이 30% 감소합니다. 공격 속도가 1.54배 빨라집니다. |
| 충격파 | 30% 확률로 공격 시 적을 1.5초간 정지시킵니다. 공격 시 반경 65 내 적에게 공격력의 40%만큼 피해를 줍니다. 공격 속도가 1.54배 빨라집니다. |
| 피의 파편 | 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 공격 속도가 1.54배 빨라집니다. 준 피해의 5%만큼 성 체력을 회복합니다. 맞은 적 수에 따라 최대 5배까지 증가합니다. |
| 대포 | 공격 시 적을 0.9초간 정지시킵니다. 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 공격력이 1.4배가 됩니다. 공격 속도가 1.7배 느려집니다. |
| 흡혈폭탄 | 공격 시 반경 91 내 적에게 공격력의 49%만큼 피해를 줍니다. 공격력이 1.7배가 됩니다. 준 피해의 5%만큼 성 체력을 회복합니다. |
| 피의 장벽 | 공격 시 범위 내 적을 2.1초간 정지시킵니다. 준 피해의 7%만큼 성 체력을 회복합니다. 맞은 적 수에 따라 최대 5배까지 증가합니다. |
| 파쇄 | 공격 시 적을 0.9초간 정지시킵니다. 공격력이 1.7배가 됩니다. 공격 속도가 1.54배 빨라집니다. 6초 동안 공격 후 25% 확률로 1.5초간 멈춥니다. |
| 사냥꾼 | 공격력이 1.7배가 됩니다. 공격 속도가 1.54배 빨라집니다. 처치 시 적 최대 체력의 4%만큼 성 체력을 회복합니다. |
| 흡착 | 공격 시 적을 1.2초간 정지시킵니다. 공격 속도가 1.54배 빨라집니다. 준 피해의 7%만큼 성 체력을 회복합니다. 둔화/정지 중인 적에게만 적용됩니다. |
| 수호자 | 공격 시 적을 1.8초간 정지시킵니다. 공격력이 1.5배가 됩니다. 공격 속도가 1.7배 느려집니다. 준 피해의 6%만큼 성 체력을 회복합니다. |
| 빙화산포 | 공격 시 적을 1.8초간 정지시킵니다. 공격 시 1초마다 공격력의 15%씩 4회(총 60%) 화상 피해를 입힙니다. 공격 시 반경 156 내 적에게 공격력의 85%만큼 피해를 줍니다. 공격 속도가 1.6배 느려집니다. |
| 늪지포 | 공격 시 적의 이동 속도를 1.8초간 30% 감소시킵니다. 공격 시 반경 156 내 적에게 공격력의 85%만큼 피해를 줍니다. 준 피해의 6%만큼 성 체력을 회복합니다. 맞은 적 수에 따라 최대 5배까지 증가합니다. |
| 폭염탄막 | 공격 시 1초마다 공격력의 15%씩 4회(총 60%) 화상 피해를 입힙니다. 공격 시 반경 78 내 적에게 공격력의 42%만큼 피해를 줍니다. 공격 속도가 1.43배 빨라집니다. 처치 시 반경 234에 공격력의 60%만큼 연쇄 폭발 피해를 줍니다. |
| 절대감옥 | 공격 시 적을 3.6초간 정지시킵니다. 공격 시 1초마다 공격력의 15%씩 4회(총 60%) 화상 피해를 입힙니다. 공격 속도가 1.6배 느려집니다. 둔화/정지 중인 적에게 1.3배 피해를 줍니다. |
| 암살비 | 공격 속도가 2.5배 빨라집니다. 체력이 25% 이하인 적에게 1.6배 피해를 줍니다. 처치 시 적 최대 체력의 4%만큼 성 체력을 회복합니다. |
| 혈핵 | 공격 시 반경 156 내 적에게 공격력의 85%만큼 피해를 줍니다. 공격 속도가 1.6배 느려집니다. 준 피해의 6%만큼 성 체력을 회복합니다. 맞은 적 수에 따라 최대 5배까지 증가합니다. |
| 시간사슬 | 35% 확률로 공격 시 적을 1.8초간 정지시킵니다. 공격 시 반경 78 내 적에게 공격력의 42%만큼 피해를 줍니다. 정지된 적에게만 피해가 적용됩니다. 공격 속도가 1.43배 빨라집니다. |
| 혈염 | 공격 시 1초마다 공격력의 30%씩 5회(총 150%) 화상 피해를 입힙니다. 지속 피해의 6%만큼 성 체력을 회복합니다. 같은 적을 계속 공격할수록 피해가 최대 32%까지 누적 증가합니다. |
| 심해 | 공격 시 적의 이동 속도를 1.8초간 60% 감소시킵니다. 30% 확률로 공격 시 적을 0.9초간 정지시킵니다. 공격 시 반경 117 내 적에게 공격력의 0%만큼 피해를 줍니다. 준 피해의 6%만큼 성 체력을 회복합니다. 맞은 적 수에 따라 최대 5배까지 증가합니다. |
| 파멸포 | 공격 시 적을 1.8초간 정지시킵니다. 공격 속도가 1.6배 느려집니다. 보스(5의 배수 레벨)에게 1.72배 피해를 줍니다. |
| 광란폭죽 | 공격 속도가 2.5배 빨라집니다. 타격 시 10% 확률로 적을 3성으로 강화시킵니다. 처치 시 40% 확률로 반경 117에 공격력의 30%만큼 연쇄 폭발 피해를 줍니다. |
| 성역 | 공격 시 적을 3.6초간 정지시킵니다. 공격력이 40% 감소합니다. 준 피해의 6%만큼 성 체력을 회복합니다. |
| 영구동토 | 공격 시 적의 이동 속도를 1.7초간 27% 감소시킵니다. 55% 확률로 공격 시 적을 4.1초간 정지시킵니다. 공격력이 40% 감소합니다. |
| 마그마지대 | 공격 시 적의 이동 속도를 1.7초간 27% 감소시킵니다. 공격 시 1초마다 공격력의 14%씩 4회(총 56%) 화상 피해를 입힙니다. 공격 시 반경 176 내 적에게 공격력의 95%만큼 피해를 줍니다. |
| 폭우검 | 공격 시 적의 이동 속도를 1.7초간 27% 감소시킵니다. 공격 속도가 3.03배 빨라집니다. 둔화/정지 중인 적에게 1.28배 피해를 줍니다. |
| 포식자 | 준 피해의 6%만큼 성 체력을 회복합니다. 처치 시 5.4초간 공격력 1.81배로 강화됩니다. 공격 속도는 1.43배가 됩니다. 추가로 적 최대 체력의 8%만큼 회복합니다. |
| 종말 | 90초마다 화면의 모든 적에게 공격력의 5배 피해를 주고 3초간 정지시킵니다. |
| 과부하 | 공격 속도가 5배 빨라집니다. 타격 시 6% 확률로 적을 3성으로 강화시킵니다. 8초 동안 공격 후 2초간 멈춥니다. |
| 천공포 | 공격 시 반경 72 내 적에게 공격력의 39%만큼 피해를 줍니다. 보스(5의 배수 레벨)에게 1.81배 피해를 줍니다. |
| 왕성수호 | 공격 시 성 근처의 적을 4.1초간 정지시킵니다. 성 체력이 낮을수록 지속 시간이 최대 2배까지 증가합니다. 준 피해의 14%만큼 성 체력을 회복합니다. 성 체력이 낮을수록 회복량이 최대 2배까지 증가합니다. |
머지 시 공 속성이 가장 우선 계승됩니다. 그 외에는 속성이 있는 포탑의 속성이 이어지고, 둘 다 속성이 있으면 드래그한 포탑의 속성이 우선됩니다.
속성 설명은 attribute-effects.js의 효과 설정에서 생성되므로, 설명에 적힌 수치와 실제 전투 효과가 같은 설정을 사용합니다.
적은 오른쪽에서 등장해 왼쪽 성을 향해 이동합니다.
- 시간이 지날수록 등장 가능한 적 레벨이 높아집니다.
- 4의 배수 레벨 적은 더 빠르게 이동합니다.
- 5의 배수 레벨 적은 보스이며 체력이 높고 자연 회복합니다.
- 3의 배수 레벨 적은 근처 포탑을 공격할 수 있습니다.
- 보스는 주변 포탑에 광역 피해와 기절을 줄 수 있습니다.
- 7의 배수 레벨 적은 살아있는 동안 10초마다 자기 주변 100px 안에 1~3레벨 낮은 적을 소환합니다.
- 11의 배수 레벨 적은 체력이 절반이지만 공격력이 2배이고, 흡혈/재생/보스 회복량이 4배입니다.
- 17의 배수 레벨 적은 체력 계산의 기본값이 해당 레벨 수치로 크게 낮아지지만, 별 등급, 보스, 속성, 고레벨 및 11의 배수 체력 배율은 정상 적용됩니다. 타워 공격 피해는 공격한 타워의 성급과 같은 수치로 고정되며, 대형 타워는 이 피해가 2배가 됩니다. 타워가 원인이 아닌 스킬 피해는 1로 고정됩니다.
- 생존 시간이 길어질수록 적에게 무작위 속성이 붙을 확률이 높아집니다.
- 적 처치 시 골드를 얻고, 일정 확률로 장비가 드랍됩니다.
적의 기본 체력에는 레벨 구간에 따라 다음 배율이 추가로 적용됩니다.
| 적 레벨 | 체력 배율 |
|---|---|
| 1~24 | 1배 |
| 25~49 | 2배 |
| 50~74 | 4배 |
| 75~99 | 8배 |
| 100~149 | 32배 |
| 150 이상 | 128배 |
이 배율은 별 등급, 보스, 적 속성에 따른 체력 배율과 함께 곱해집니다. 11의 배수 레벨 적은 위 배율까지 적용된 체력에서 다시 절반으로 감소합니다.
| 생존 시간 | 무속성 | 속성 |
|---|---|---|
| 0~29초 | 100% | 0% |
| 30~99초 | 80% | 20% |
| 100~599초 | 60% | 40% |
| 600초 이후 | 5% | 95% |
30초 이후에는 공중, 고스트, 골렘, 번개가 균일 확률로 등장합니다. 100초 이후에는 재생, 방패, 분열, 암살자, 중갑, 마법저항이 추가됩니다. 600초 이후에는 모든 적 속성이 균일 확률로 등장합니다.
| 적 속성 | 효과 |
|---|---|
| 공중 | 일반 지상 공격 피해를 크게 줄이고, 공/번개 계열 대응 속성에 더 큰 피해를 받습니다. |
| 고스트 | 일반 공격을 일정 확률로 회피하며, 벽 계열 정지 공격에 약합니다. |
| 골렘 | 체력이 높고 이동이 느리며 둔화/정지 효과를 덜 받습니다. 힘/폭탄 계열 피해에 약합니다. |
| 번개 | 이동 속도가 빠르고 일정 주기마다 짧게 순간이동합니다. 물/벽 계열에 약합니다. |
| 얼음 | 둔화와 정지 효과를 크게 줄입니다. 불 계열 피해에 약합니다. |
| 화염 | 지속 피해를 덜 받습니다. 물 계열에 약합니다. |
| 재생 | 시간이 지나면 체력을 회복합니다. 불 지속 피해나 폭탄 피해에 약합니다. |
| 방패 | 앞에서 받는 일반 피해를 줄입니다. 폭탄 범위 피해나 뒤쪽 공격에 약합니다. |
| 분열 | 죽으면 작은 무속성 적으로 나뉩니다. 폭탄 피해로 처치하면 분열하지 않고 더 큰 피해를 받습니다. |
| 광폭 | 체력이 낮아지면 이동 속도가 빨라집니다. 벽/물 계열 제어가 중요합니다. |
| 흡혈 | 성에 닿으면 성 피해량이 높고 자신의 체력을 회복합니다. 힘/폭탄 계열에 약합니다. |
| 마법저항 | 불, 물, 피 같은 특수 속성 피해를 덜 받습니다. 힘/공 계열 기본 피해에 약합니다. |
| 중갑 | 일반 공격 피해를 줄입니다. 지속 피해와 폭탄 피해에 약합니다. |
| 암살자 | 매우 빠르고 성 피해가 높지만 체력이 낮습니다. |
| 보스 | 5의 배수 레벨 적에게 붙는 별도 특성입니다. 자연 회복하고 상태이상 시간이 짧게 적용됩니다. |
장비는 하단 보관함의 아이템 탭에서 확인할 수 있습니다. 설치된 포탑을 클릭한 뒤 장비 슬롯으로 드래그하면 장착됩니다.
| 장비 | 효과 |
|---|---|
| 기름 | 공격 속도 증가 |
| 조준경 | 공격 범위 증가 |
| 화약 | 공격력 증가 |
| 무게추 | 폭탄 범위 증가 |
| 바늘 | 치명타 확률 증가 |
| 망치 | 치명타 피해 증가 |
| 방패 | 최대 체력 증가 |
같은 종류의 장비끼리는 드래그 앤 드롭으로 합성할 수 있습니다. 두 장비의 수치를 기준으로 더 강한 장비가 생성됩니다.
하단 보관함에서 아직 설치하지 않은(대기 중인) 포탑을 클릭하면 작은 메뉴가 뜹니다.
| 동작 | 설명 |
|---|---|
| 삭제 | 포탑 레벨의 제곱(lv²)만큼 골드를 소모해 포탑을 없앱니다. 골드가 부족하면 버튼이 비활성화됩니다. |
| 분해 | 포탑을 없애고 그 포탑의 속성을 속성 구슬 1개로 바꿉니다. 속성이 없는 포탑은 분해할 수 없습니다. |
| 융합 | 보유한 속성 구슬 하나를 소모해 그 포탑의 속성을 바꿉니다. |
| 취소 | 메뉴를 닫습니다. |
포탑을 분해하면 속성 구슬을 얻습니다. 하단 탭의 대장장 버튼을 누르면 대장간 창이 뜨고, 동시에 보관함이 보유 중인 조합서 목록으로 전환됩니다.
대장간에서는 구슬 3개를 골라 새로운 속성 구슬을 합성할 수 있습니다. 정해진 조합표에 있는 정확한 3개 조합일 때만 결과가 표시되며, 표에 없는 조합은 합성 버튼이 비활성화된 채 아무 결과도 나오지 않습니다. 조합법은 게임 안에서 발견하는 요소로 두기 위해 README에는 공개하지 않습니다.
각 속성 구슬은 이름과 수치가 포함된 효과 설명을 함께 표시하며, 설명은 실제 적용되는 효과 설정을 기준으로 생성됩니다.
같은 레벨의 포탑을 합성할 때마다 20% 확률로 조합서를 하나 얻습니다. 조합서는 게임 안에서 조합 단서를 발견하는 수집형 아이템이며, 이미 가지고 있는 조합서를 다시 얻으면 중복 없이 그냥 사라집니다. 조합서는 하단 보관함의 대장장 탭에서 확인할 수 있습니다.
보드 왼쪽의 스킬 버튼으로 전투를 보조할 수 있습니다.
| 스킬 | 효과 | 쿨다운 |
|---|---|---|
| 포격 | 모든 적에게 현재 체력의 30%만큼 피해를 줍니다. | 20초 |
| 빙결파 | 모든 적을 4초 동안 둔화시킵니다. | 15초 |
| 골드러시 | 즉시 골드를 획득합니다. (max(20, floor(40 × 생성레벨^1.5))) |
25초 |
| 응급 수리 | 성 체력을 최대 체력의 20%, 설치된 모든 포탑의 체력을 각 포탑 최대 체력의 20%만큼 회복합니다. | 30초 |
| 소환 지연 | 10초 동안 적 생성 간격을 2배 느리게 만듭니다. | 45초 |
스킬 쿨다운은 실제 시간 기준으로 계산됩니다. 배속을 바꿔도 쿨다운을 줄이는 꼼수는 적용되지 않습니다.
- 생성 단계 향상: 새로 생성되는 포탑의 기본 레벨을 올립니다.
- 개별 업그레이드: 설치된 포탑의 공격 속도, 공격력, 사거리, 최대 체력을 올립니다.
- 전체 업그레이드: 모든 포탑의 공격 속도, 공격력, 사거리를 올립니다.
- 치명타 업그레이드: 치명타 확률과 치명타 피해량을 강화합니다.
- 성 체력 향상: 성의 최대 체력을 늘리고 즉시 일부 회복합니다.
- 설치 최대치 +1: 동시에 설치 가능한 포탑 수를 늘립니다.
- 배속: 1배속, 2배속, 5배속, 0배속(정지)을 전환합니다.
업그레이드 버튼에는 x1, x10, x100 선택 버튼이 붙어 있어 여러 번의 업그레이드를 한 번에 구매할 수 있습니다.
모든 주요 숫자는 3자리마다 쉼표가 들어간 형식으로 표시됩니다.
시작 화면의 팀 플레이 버튼으로 room.html 로비에 입장합니다.
- 방 만들기: 방 이름, 선택적 비밀번호, 최대 인원(2/3/4/6인), 관전 허용 여부를 지정해 방을 만듭니다. 관전 허용은 기본값이 켜짐이며, 6자리 초대코드가 자동 발급됩니다.
- 참가하기: 초대코드와 (설정된 경우) 비밀번호를 입력해 참가합니다. 열린 방 목록에서 방을 눌러 코드를 자동으로 채울 수도 있습니다.
- 관전하기: 관전을 허용한 진행 중 방은 방 목록에
관전버튼이 표시됩니다. 게스트는 게임 화면을 볼 수 있지만 포탑 생성, 업그레이드, 스킬 사용, 마우스 포인터 공유 같은 행동은 할 수 없습니다. - 대기실: 참가자 목록이 실시간으로 표시됩니다. 호스트만
게임 시작,방 삭제버튼을 볼 수 있습니다. 누구나나가기로 방을 떠날 수 있습니다. - 게임 진행 방식: 각 플레이어의 골드와 개인 T 보관함은 개인별로 관리되고, 포탑 배치/포탑 체력/포탑에 남아 있는 타임/장비/속성 구슬/전역 업그레이드/성 체력/배속/적 웨이브는 방 전체가 공유됩니다. 한 플레이어가 포탑을 만들거나 배치, 업그레이드하면 모든 플레이어 화면에 같은 상태로 반영됩니다.
- 마우스 포인터 공유: 게임 중 각 플레이어의 마우스 위치가 다른 팀원의 화면에 색이 있는 원과 닉네임으로 실시간 표시됩니다. 업그레이드 창 등 모달이 열려 있으면 항상 포인터보다 위에 표시됩니다.
- 호스트 권한: 적 스폰, 이동, 전투 판정, 성 체력 자연 회복, 보스 자연 회복, 포탑 타임 증가는 호스트 클라이언트가 계산해 나머지 참가자에게 실시간 브로드캐스트합니다. 원래 호스트가 나가면 접속 중인 플레이어 한 명이 임시 호스트로 자동 선출되고, 원래 호스트가 돌아오면 권한이 복원됩니다.
- 알려진 한계 (v1): 방 비밀번호는 SHA-256 해시로 저장되지만 별도 인증 서버 없이 클라이언트에서 비교하는 방식이라 완전한 보안은 아닙니다. 진행 중인 방에는 중간 참가가 불가능합니다.
이 프로젝트는 별도 빌드 과정이 없는 정적 웹 프로젝트입니다.
python3 -m http.server 8000브라우저에서 아래 주소로 접속합니다.
http://localhost:8000
파일을 직접 열어도 동작할 수 있지만, 랭킹 API 요청과 브라우저 보안 정책을 고려하면 로컬 서버 실행을 권장합니다.
js/supabase-config.js에 Supabase REST API 정보를 입력하면 랭킹 저장과 조회가 활성화됩니다.
window.SUPABASE_CONFIG = {
url: 'https://YOUR_PROJECT.supabase.co',
publicKey: 'YOUR_SUPABASE_PUBLISHABLE_KEY',
rankingsTable: 'rankings',
teamRankingsTable: 'team_rankings'
};필요한 테이블 예시는 다음과 같습니다.
create table rankings (
id bigint generated by default as identity primary key,
name text not null,
survival_time integer not null,
created_at timestamptz not null default now()
);팀 플레이 랭킹은 supabase-team-rankings.sql을 Supabase SQL Editor에서 실행해 추가합니다. 팀 기록은 게임이 끝날 때 방 ID당 한 번만 저장됩니다.
Supabase를 설정하지 않으면 게임은 정상 실행되지만 랭킹 저장과 조회는 비활성화됩니다.
방 시스템을 사용하려면 Supabase SQL Editor에서 아래 테이블을 추가로 생성해야 합니다. 랭킹 테이블과 마찬가지로 별도 인증 없이 publishable key로 접근하는 구조이므로 RLS는 비활성 상태(기본값)로 둡니다.
create table rooms (
id bigint generated by default as identity primary key,
code text not null unique,
name text not null,
password_hash text,
host_client_id text not null,
max_players int not null default 4,
allow_spectators boolean not null default true,
status text not null default 'waiting',
castle_max_hp numeric not null default 1000,
castle_hp numeric not null default 1000,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);
create table room_players (
id bigint generated by default as identity primary key,
room_id bigint not null references rooms(id) on delete cascade,
client_id text not null,
name text not null,
is_host boolean not null default false,
joined_at timestamptz not null default now(),
unique (room_id, client_id)
);또한 Supabase 프로젝트의 Realtime 기능(Broadcast/Presence)이 활성화되어 있어야 하며, room-<roomId>라는 이름의 공개 채널에 대해 별도 Realtime Authorization 정책을 추가하지 않은 기본 설정을 가정합니다. 프로젝트가 비공개 채널(private) 정책으로 전환되어 있다면 realtime.messages에 대한 RLS 정책을 추가로 구성해야 합니다.
mergedefense/
├── index.html # 시작 화면, 랭킹 목록, 팀 플레이 진입
├── index.css # index.html 전용 스타일
├── main.html # 메인 게임 화면
├── style.css # main.html 전용 스타일
├── js/ # JavaScript 파일
│ ├── index.js # 로그인, 랭킹 로딩/렌더링
│ ├── room.js # 방 CRUD·초대코드·대기실 로직
│ ├── fail.js # 팀 결과 요약, 재시작 버튼
│ ├── team.js # 팀 플레이 실시간 동기화 어댑터 (main.html에서 로드)
│ ├── supabase-config.js # Supabase 연결 설정
│ ├── format.js # 숫자 표시 포맷 유틸리티
│ ├── config.js # 상수, DOM 참조, 전역 상태
│ ├── towers.js # 타워 생성/스탯/생성비용
│ ├── enemies.js # 적 생성/이동/특수 레벨 규칙
│ ├── equipment.js # 장비 생성/장착/해제
│ ├── combat.js # 공격 루프, 총알, 데미지, 회복 루프
│ ├── upgrade-modal.js # 타워 업그레이드 모달, 전역 업그레이드
│ ├── inventory.js # 드래그앤드롭, 인벤토리 뷰
│ ├── attribute-effects.js # 속성 효과 설정/적용/설명 생성
│ ├── attribute-orbs.js # 대기 포탑 삭제/분해/융합 + 대장간
│ ├── skills.js # 스킬바
│ ├── persistence.js # 개인/팀 플레이 저장·복원
│ └── game.js # 게임 루프/인터벌, 랭킹 저장, 이벤트 바인딩
├── room.html # 팀 플레이 방 생성/참가/대기실
├── room.css # room.html 전용 스타일
├── fail.html # 게임 오버 화면 (팀 결과 요약 포함)
├── fail.css # fail.html 전용 스타일
├── defense.png # 성 이미지
├── img/ # 포탑 이미지
└── enemyImg/ # 적 이미지
- HTML5
- CSS3
- Vanilla JavaScript
- Supabase REST API
- Supabase Realtime (Broadcast/Presence, 팀 플레이용)
MIT License