diff --git a/README.md b/README.md index 465f6fa..b28fbce 100644 --- a/README.md +++ b/README.md @@ -29,13 +29,14 @@ | ↳ | `/tank.html#2` | 2단계 미로 | 6대 (동시 4) | 밀도 43%, 1칸 폭 통로가 얽힌 미로 | | ↳ | `/tank.html#3` | 3단계 강철 회랑 | 8대 (동시 4) | 강철 31칸, 기지 외곽 2중 + 좁은 진입로 | | ↳ | `/tank.html#4` | 4단계 참호 | 10대 (동시 4) | **물길** + **보급 상자**(시간 정지 / 기지 강화) | +| ↳ | `/tank.html#5` | 5단계 최후 방어선 | 12대 (동시 5) | **숲**(은폐) + **화력 강화** 상자 + **지휘 탱크** | 방향키 이동, 스페이스 발사. 한 단계를 돌파하면 다음 단계로 이어지고, 점수와 남은 탱크를 그대로 가져간다. **단계를 거치지 않고 바로 들어가는 방법**은 셋이다. -- 왼쪽 탭의 `휴게실 > 탱크게임` 아래 단계 칩 (셸 주소로는 `/#tank2` … `/#tank4`) -- 게임 화면 오른쪽 아래의 단계 버튼, 또는 `1` ~ `4` 키 -- 주소 직접 입력 — `/tank.html#4`, `/tank.html?stage=4` (범위를 벗어난 값은 1단계) +- 왼쪽 탭의 `휴게실 > 탱크게임` 아래 단계 칩 (셸 주소로는 `/#tank2` … `/#tank5`) +- 게임 화면 오른쪽 아래의 단계 버튼, 또는 `1` ~ `5` 키 +- 주소 직접 입력 — `/tank.html#5`, `/tank.html?stage=5` (범위를 벗어난 값은 1단계) ## 특수 요소 @@ -46,9 +47,12 @@ | 요소 | 동작 | 쓰인 단계 | |---|---|---| | 물길 `W` | 탱크는 건널 수 없고 포탄은 넘어간다. 건너려면 도선(ford)으로 돌아야 한다 | 4 | -| 보급 상자 | 일정 주기로 빈 칸에 하나 놓인다. 밟으면 효과 + 50점 | 4 | -| ↳ 시간 정지 | 적 전원이 3초간 멈춘다 (포탄은 계속 난다) | 4 | -| ↳ 기지 강화 | 기지 외곽 5칸이 10초간 강철이 된다. 끝나면 벽돌로 돌아오며 부서졌던 칸도 메워진다 | 4 | +| 숲 `F` | 탱크도 포탄도 지나가지만 잎이 탱크를 덮어 가린다. 매복이 된다 | 5 | +| 보급 상자 | 일정 주기로 빈 칸에 하나 놓인다. 밟으면 효과 + 50점 | 4, 5 | +| ↳ 시간 정지 | 적 전원이 3초간 멈춘다 (포탄은 계속 난다) | 4, 5 | +| ↳ 기지 강화 | 기지 외곽 5칸이 10초간 강철이 된다. 끝나면 벽돌로 돌아오며 부서졌던 칸도 메워진다 | 4, 5 | +| ↳ 화력 강화 | 10초간 동시 3발 + 탄속 1.35배 | 5 | +| 지휘 탱크 | 편성 마지막에 나오는 대장. 체력 3, 빠르고 연사가 잦다. 격파 300점 | 5 | 효과가 걸린 동안에는 화면 왼쪽 위에 남은 시간이 배지로 표시된다. diff --git a/site/index.html b/site/index.html index 6144957..31a1031 100644 --- a/site/index.html +++ b/site/index.html @@ -175,6 +175,7 @@ body{ 2단계 3단계 4단계 + 5단계 @@ -201,7 +202,8 @@ var PAGES = { tank1: {file:'tank.html#1', name:'휴게실 · 탱크게임 1단계'}, tank2: {file:'tank.html#2', name:'휴게실 · 탱크게임 2단계'}, tank3: {file:'tank.html#3', name:'휴게실 · 탱크게임 3단계'}, - tank4: {file:'tank.html#4', name:'휴게실 · 탱크게임 4단계'} + tank4: {file:'tank.html#4', name:'휴게실 · 탱크게임 4단계'}, + tank5: {file:'tank.html#5', name:'휴게실 · 탱크게임 5단계'} }; var DEFAULT = 'korean'; diff --git a/site/tank.html b/site/tank.html index aaa9615..11e4c46 100644 --- a/site/tank.html +++ b/site/tank.html @@ -49,8 +49,11 @@ } .row:last-of-type{border-bottom:0} .row b{font-size:16px; color:#fff; font-variant-numeric:tabular-nums} - .pips{display:flex; gap:4px; align-items:center} - .pip{width:12px;height:12px;border-radius:2px;background:#dcc76d;box-shadow:inset 0 -3px 0 rgba(0,0,0,.28)} + .pips{ + display:flex; flex-wrap:wrap; gap:3px; align-items:center; + justify-content:flex-end; max-width:152px; + } + .pip{width:9px;height:9px;border-radius:2px;background:#dcc76d;box-shadow:inset 0 -2px 0 rgba(0,0,0,.28)} .pip.e{background:#b9c2cc} .pip.off{background:#463728; box-shadow:none} .keys{margin-top:11px; font-size:12px; line-height:1.72; color:#cbb79a} @@ -122,7 +125,7 @@ var COLS=17, ROWS=15, CELL=32; var W=COLS*CELL, H=ROWS*CELL; var SIZE=28, OFF=(CELL-SIZE)/2; -var EMPTY=0, BRICK=1, STEEL=2, BASE=3, RUIN=4, WATER=5; +var EMPTY=0, BRICK=1, STEEL=2, BASE=3, RUIN=4, WATER=5, FOREST=6; var BASE_C=8, BASE_R=14; var PLAYER_SPAWN={c:5,r:13}; @@ -134,7 +137,9 @@ var KIND={ scout: {speed:66, hp:1, body:"#b9c2cc", dark:"#6f7884", light:"#e4eaf0", fire:1.10, bspd:190, pHunt:0.35, pRush:0.10}, heavy: {speed:46, hp:2, body:"#9d8f7a", dark:"#5f5648", light:"#cbbda6", fire:1.35, bspd:165, pHunt:0.20, pRush:0.18}, hunter:{speed:86, hp:1, body:"#c98a6a", dark:"#7d4f38", light:"#efb797", fire:0.85, bspd:215, pHunt:0.70, pRush:0.05}, - guard: {speed:58, hp:1, body:"#a7b58e", dark:"#5f6b4c", light:"#d5e0bd", fire:1.00, bspd:195, pHunt:0.15, pRush:0.08} + guard: {speed:58, hp:1, body:"#a7b58e", dark:"#5f6b4c", light:"#d5e0bd", fire:1.00, bspd:195, pHunt:0.15, pRush:0.08}, + commander:{speed:76, hp:3, body:"#c2708e", dark:"#7a3b52", light:"#f0a8c0", fire:0.70, bspd:235, + pHunt:0.65, pRush:0.20, worth:300, crown:true} }; var STAGES=[ @@ -228,6 +233,31 @@ var STAGES=[ ".B.B...BBB...B.B.", ".SS....BEB....SS." ] + }, + { + name:"STAGE 5 · 최후 방어선", + maxOnField:5, + enemies:["hunter","heavy","scout","hunter","heavy","guard","hunter","heavy","scout","hunter","heavy","commander"], + items:["freeze","shield","power"], + itemEvery:12, + specials:"숲(탱크·포탄 통과, 은폐) · 화력 강화 상자 · 동시 5대 · 지휘 탱크", + map:[ + ".................", + ".BB.BB..S..BB.BB.", + ".B...B..B..B...B.", + ".B.BBB.B.B.BBB.B.", + "..B.FFF...FFF.B..", + ".BB.BSB...BSB.BB.", + ".B..B..BBB..B..B.", + "SS..B..B.B..B..SS", + ".B..B..BBB..B..B.", + ".BB.BSB...BSB.BB.", + "..B.FFF...FFF.B..", + ".B.BBB.B.B.BBB.B.", + ".BFFFB.BBB.BFFFB.", + ".BB.B..BBB..B.BB.", + ".S.....BEB.....S." + ] } ]; @@ -300,7 +330,7 @@ var elSpec=document.getElementById("spec"); (function(){ /* 단계 키 안내 */ var t="",i; for(i=1;i<=STAGES.length;i++) t+=""+i+""; - document.getElementById("stagekeys").innerHTML=t+" 단계 직접 선택"; + document.getElementById("stagekeys").innerHTML=t+" 단계 선택"; })(); var grid, player, enemies, bullets, fx, spawns, enemyQueue; @@ -324,7 +354,7 @@ function buildGrid(src){ var row=[]; for(c=0;c