"매 funnel + overlap = kill zone". Base layout 은 enemy path 의 shape 결정 — kill zone 은 매 player damage output 의 overlap 이 maximum 인 spatial pocket. 매 1990s tower defense (StarCraft custom) 부터 매 2026 modern roguelike-TD (Mindustry, Bloons TD 6, Last Epoch) 까지 매 same physics: time-in-zone × DPS-coverage = kill probability.
매 핵심
매 spatial primitives
Funnel: 매 narrow chokepoint — enemy density ↑.
Maze: 매 path-length amplifier — time-in-zone ↑.
Overlap circle: 매 multiple tower 의 range intersection — DPS-coverage ↑.
Kill zone = funnel ∩ overlap with sustainable supply.
매 design dimensions
Path topology: linear / branching / loop / open-field.
Damage type matching: AoE → cluster funnel; single-target → narrow.
Failure budget: leak threshold (lives) → kill zone redundancy 의 driver.
RTS base building — choke at ramp + siege range = kill zone.
Roguelike room design — door funnel + ranged enemy stagger.
💻 패턴
Kill zone scoring (designer tool)
defkill_zone_score(tile,towers,path,enemy_speed=1.0):"""Higher = better kill zone tile."""coverage=sum(1fortintowersifdist(t.pos,tile)<=t.range)time_in_zone=path.length_through(tile)/enemy_speedreturncoverage*time_in_zone
Funnel detection on a grid
defis_funnel(grid,x,y,width=1):"""A tile is a funnel if path width is locally constrained."""ifgrid[y][x]!=PATH:returnFalseneighbors=[(x+dx,y+dy)fordx,dyin[(-1,0),(1,0),(0,-1),(0,1)]]path_neighbors=sum(1fornx,nyinneighborsifgrid[ny][nx]==PATH)returnpath_neighbors<=2# corridor-like
defbuild_maze_path(grid,entry,exit,target_length):"""Insert obstacles to lengthen path until ≈ target_length."""whileshortest_path(grid,entry,exit).length<target_length:x,y=random_buildable_tile(grid)grid[y][x]=OBSTACLEifnotshortest_path(grid,entry,exit):grid[y][x]=EMPTY# rollback: must remain solvablereturngrid
FPS sightline kill zone (Unreal blueprint sketch)
// 매 corner peek + cover position 의 detection
boolIsKillZone(FVectorpos,constTArray<FVector>&sightlines){intcovering=0;for(constFVector&sl:sightlines)if(HasLineOfSight(sl,pos))covering++;returncovering>=2;// 2+ angles = kill zone
}