롤 26.18 패치노트 미리보기 핵심 정리|챔피언 버프·너프 총정리 + (시뮬레이션 실험실 추가)

댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.

댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
- 롤 26.18 패치노트 핵심 정리|챔피언 버프·너프 총정리
- 롤 26.18 패치노트로 알아보는 게임 밸런스 기획
- 패치노트 밸런스 시뮬레이션 실험실
핵심 정리






































게임 패치노트를 단순히 '누가 버프되고, 너프되었나' 보는 것에서 한걸음 더 나아가면, 라이엇 게임즈라는 글로벌 기업이 데이터를 분석하고 문제를 해결해 나가는 기획과 문제 해결의 프레임워크'를 엿볼 수 있습니다.
<이 글은 게임 기획자을 준비하는 학생을 위한 스터디 목적입니다>
이번 26.18 패치에 담긴 핵심 기획 포인트를 살펴보겠습니다.
게임 기획에서 가장 머리 아픈 일 중 하나는 '프로가 쓰면 사기인데, 일반 유저가 쓰면 안좋은 챔피언을 조율하는 것입니다.
이번 패치의 카시오페아와 신드라가 대표적인 사례입니다.
카시오페아의 기획 의도 : 프로 경기에서는 방어 아이템을 두르는 안정적인 빌드 때문에 까다로운 존재였지만, 일반 구간에서는 승률이 낮았습니다. 라이엇은 순수 주문력 계수와 스킬 성장을 조정해 '저점을 높이고, 고점을 살짝 낮추는' 정교한 밸런스 조정을 시도했습니다.
시사점 : 타겟층의 행동 패턴에 따라 제품이나 서비스의 특정 기능을 유연하게 조절하는 기획의 묘미를 배울 수 있습니다.
노틸러스와 제리 : 노틸러스는 한 해 동안 서포터 1티어를 독점했고, 제리는 아이템시너지로 승률이 급등했습니다. 기획팀은 이들의 고유 정체성(노틸러스의 CC기, 제리의 화력)은 유지하되, 과도한 체급과 라인 클리어 능력을 수치적으로 깎아내려 다른 선택지가 숨쉴 틈을 만들어주었습니다.
시사점 : 한 가지 독점 구조가 전체 생태계를 해칠 때, 리소스를 분산시켜 다양성을 확보하는 의사결정 방식입니다.
단순한 밸런스 패치 외에도 플레이어의 몰입도를 높이느 UX 개선이 돋보였습니다.
자헨과 구인수의 격노검 : 버그 수정이나 시스템 변경으로 인해 손해를 본 챔피언들에게 매끄러운 스킬 연계와 중첩 지속시간 연장같은 '보상형 편의성 개선'을 제공했습니다.
클래식 모드와 의회 투표 : 과거의 향수를 불러일으키는 데마시아 클래식 챔피언들(피오라, 갈리오, 뽀삐 등)의 대거 합류와 유저 투표 결과를 반영한 시스템 개편은 커뮤니티와의 소통이 어떻게 제품 만족도로 이어지는지 잘 보여줍니다.
롤 26.18을 맞이해서 패치 밸런스 실험실을 만들어보았는데요
아래 내용은 게임 기획을 공부하는 학생이 공부 목적으로 제작한 내용입니다.
주요 챔피언에 따라 수치를 조정했을 때 버프와 너프의 적정수치는 어떤 값이 적정한가에 대한 질문을 찾아보려고했습니다.
링크 자세히 보기
++https://songdh004.github.io/lol-26.18/index.html++
++https://songdh004.github.io/lol-26.18/index2.html++
가장 먼저 노틸러스의 적정 방어력에 대해서 알아보려고합니다.

방어력 30.7로 맞춘 상태로 닻줄 견인 피해량 245dmg로 했을 때 오버파워가 되는데요
예상 승률은 53.6%가 표시됩니다.
반대로 방어력을 최대로 올린 상태에서 닻줄 견인 피해량을 최소로 내렸을때를 확인해보겠습니다.

35.1 그리고 닻줄 견인 피해량은 216.2dmg가 나오네요
현재 방어력보다 조금 더 버프될 가능성 여유분은 있습니다.
한가지 더 알아보면
카사딘 버프한 캐릭터를 알아보겠습니다.


실제 시뮬레이션을 통해 캐릭터의 적정 수치를 확인해볼 수 있습니다.
한번 시도하실 수 있도록 파일 첨부해놓겠습니다.
실험실 1 (버프 & 너프 챔피언 확인하기)
<h1>⚖️ LoL 26.18 패치 밸런스 실험실</h1>
<div class="subtitle">실시간 챔피언 체급 조정 및 시뮬레이터</div>
<div class="container">
<!-- 챔피언 선택 및 수치 조절 패널 -->
<div class="panel">
<h2>🧪 챔피언 선택 & 수치 조정</h2>
<div id="champ-list"></div>
<div id="sliders-container" style="margin-top: 20px;">
<h3 id="current-champ-title">챔피언을 선택하세요</h3>
<div id="slider-box"></div>
</div>
</div>
<!-- 실시간 시뮬레이션 결과 패널 (WebGL / Canvas) -->
<div class="panel">
<h2>📊 실시간 시뮬레이션 분석</h2>
<canvas id="simCanvas" width="500" height="300"></canvas>
<div class="simulation-result" id="result-box">
<strong>시뮬레이션 평가:</strong><br>
<span id="eval-text">챔피언을 선택하고 수치를 변경해보세요.</span>
</div>
</div>
</div>
실험실 2 (전투 시작 포함)
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>LoL 26.18 패치 밸런스 실험실</title>
<style>
*{box-sizing:border-box} body{margin:0;background:#07111f;color:#eaf2ff;font-family:Arial,"Noto Sans KR",sans-serif;overflow:hidden}
button,input{font:inherit}.app{width:100vw;height:100vh;position:relative;overflow:hidden;background:
radial-gradient(circle at 50% 45%,#17385b 0,#0a1829 42%,#040912 100%)}
.grid{position:absolute;inset:0;opacity:.18;background-image:linear-gradient(#6fa7d422 1px,transparent 1px),linear-gradient(90deg,#6fa7d422 1px,transparent 1px);background-size:45px 45px;transform:perspective(500px) rotateX(58deg) scale(1.5);transform-origin:50% 100%}
.top{height:74px;padding:18px 28px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ffffff16;background:#050b15cc;position:relative;z-index:3}
.logo{font-weight:900;letter-spacing:2px}.logo span{color:#67d8ff}.patch{font-size:12px;color:#8ea6c5}
.screen{position:absolute;inset:74px 0 0;display:flex;align-items:center;justify-content:center;padding:22px}
.panel{width:min(1180px,94vw);min-height:640px;border:1px solid #6fc8ff38;background:#071321dd;box-shadow:0 25px 80px #0008;border-radius:20px;padding:26px;position:relative}
h1{font-size:34px;margin:0 0 8px}.sub{color:#9bb0c9;margin-bottom:22px}.tabs{display:flex;gap:8px;margin-bottom:18px}.tab{padding:9px 14px;border:1px solid #ffffff16;border-radius:999px;color:#91a7c1;background:#0b1929}.tab.active{color:#07111f;background:#67d8ff;font-weight:800}
.battle{display:grid;grid-template-columns:1fr 1.2fr 1fr;gap:18px;align-items:stretch}
.card{background:#0a1727;border:1px solid #ffffff14;border-radius:16px;padding:20px}.card h2{margin:0 0 8px;font-size:19px}.tag{font-size:11px;color:#7e9abb;text-transform:uppercase;letter-spacing:1.5px}
.stat{margin:17px 0}.statline{display:flex;justify-content:space-between;font-size:13px;margin-bottom:7px}.bar{height:8px;background:#14283e;border-radius:99px;overflow:hidden}.fill{height:100%;border-radius:99px;transition:.25s}
.before .fill{background:#8495aa}.after .fill{background:#67d8ff}
.arena{min-height:440px;border-radius:16px;border:1px solid #ffffff14;background:
radial-gradient(circle at 50% 50%,#234b68 0,#10283b 35%,#081521 75%);position:relative;overflow:hidden}
.arena:before{content:"";position:absolute;width:420px;height:180px;border:1px solid #69d8ff22;border-radius:50%;left:50%;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 50px #4ac9ff11}
.fighter{position:absolute;width:76px;height:76px;border-radius:50%;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:900;transition:.3s}
.left{left:13%;background:linear-gradient(135deg,#5c6877,#222d39);box-shadow:0 0 25px #8295aa66}.right{right:13%;background:linear-gradient(135deg,#48d5ff,#176486);box-shadow:0 0 25px #3bd5ff66}
.hp{position:absolute;width:130px;height:8px;background:#172335;border-radius:9px;top:calc(50% + 53px);transform:translateX(-50%);overflow:hidden}.hp i{display:block;height:100%;background:#71e1a2;transition:.2s}.hp.enemy i{background:#ff7181}
.hp1{left:calc(13% + 38px)}.hp2{right:calc(13% + 38px);transform:translateX(50%)}
.vs{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:900;color:#8ca8c7;font-size:13px}
.damage{position:absolute;left:50%;top:36%;transform:translate(-50%,-50%);font-size:32px;font-weight:900;opacity:0;pointer-events:none}.damage.show{animation:pop .65s}.heal{color:#72e1a2}
@keyframes pop{0%{opacity:0;transform:translate(-50%,0) scale(.7)}25%{opacity:1}100%{opacity:0;transform:translate(-50%,-55px) scale(1.15)}}
.controls{margin-top:16px}.control{margin:14px 0}.control label{display:flex;justify-content:space-between;font-size:13px;color:#b9c9dc;margin-bottom:7px}.control output{color:#67d8ff;font-weight:800}
input[type=range]{width:100%;accent-color:#67d8ff}
.actions{display:flex;gap:10px;margin-top:18px}.btn{border:0;border-radius:10px;padding:13px 18px;cursor:pointer;font-weight:800}.primary{background:#67d8ff;color:#06101c}.secondary{background:#13263b;color:#c8d7e8;border:1px solid #ffffff15}
.log{height:80px;margin-top:15px;padding:12px;border-radius:10px;background:#050d17;color:#8197b2;font-size:12px;overflow:auto}
.result{position:absolute;right:26px;bottom:24px;color:#7fa0c3;font-size:12px}.result b{color:#71e1a2}
.badge{display:inline-block;padding:5px 9px;border-radius:999px;background:#13283d;color:#67d8ff;font-size:11px;margin-top:6px}
@media(max-width:900px){.battle{grid-template-columns:1fr}.panel{overflow:auto;max-height:90vh}.app{overflow:auto}.screen{align-items:flex-start}.arena{min-height:360px}}
</style>
</head>
<body>
<div class="app">
<div class="grid"></div>
<div class="top"><div class="logo">PATCH <span>LAB</span> // BALANCE SIMULATOR</div><div class="patch">LEAGUE OF LEGENDS · 26.18 · 2026.09.09</div></div>
<div class="screen">
<div class="panel">
<h1>26.18 패치 밸런스 실험실</h1>
<div class="sub">패치 전과 패치 후의 수치를 직접 조정하고, 간단한 전투 시뮬레이션으로 결과를 확인해보세요.</div>
<div class="tabs"><div class="tab active">BALANCE TEST</div><div class="tab">GAME DESIGN</div><div class="tab">UNITY PRACTICE</div></div>
<div class="battle">
<section class="card before">
<div class="tag">LIVE · BEFORE</div><h2>패치 전 · 노틸러스</h2><span class="badge">26.17 기준</span>
<div id="beforeStats"></div>
</section>
<section>
<div class="arena">
<div class="fighter left">⚓</div><div class="fighter right">⚔</div><div class="vs">VS</div>
<div class="hp hp1"><i id="hp1"></i></div><div class="hp hp2 enemy"><i id="hp2"></i></div>
<div id="damage" class="damage">-</div>
</div>
<div class="actions"><button class="btn primary" onclick="startBattle()">▶ 전투 시작</button><button class="btn secondary" onclick="resetBattle()">↻ 초기화</button></div>
<div class="log" id="log">대기 중 — 슬라이더를 조정한 뒤 전투를 시작하세요.</div>
</section>
<section class="card after">
<div class="tag">PATCHED · 26.18</div><h2>패치 후 · 노틸러스</h2><span class="badge">실제 패치 수치 반영</span>
<div id="afterStats"></div>
<div class="controls">
<div class="control"><label>공격력 <output id="atkOut">58</output></label><input id="atk" type="range" min="40" max="80" value="58" oninput="update()"></div>
<div class="control"><label>Q 피해량 <output id="qOut">245</output></label><input id="q" type="range" min="150" max="300" value="245" oninput="update()"></div>
<div class="control"><label>Q 쿨타임 <output id="cdOut">8.0초</output></label><input id="cd" type="range" min="4" max="14" step=".5" value="8" oninput="update()"></div>
</div>
</section>
</div>
<div class="result">학습 포인트: <b>수치 변경 → 전투 결과 → 밸런스 판단</b></div>
</div>
</div>
</div>
<script>
const base={hp:100,atk:61,q:265,cd:8};
let timer=null;
function statHTML(s,cls=''){
return `<div class="stat"><div class="statline"><span>체력</span><b>${s.hp}</b></div><div class="bar"><div class="fill" style="width:${Math.min(100,s.hp/2)}%"></div></div></div>
<div class="stat"><div class="statline"><span>공격력</span><b>${Math.round(s.atk)}</b></div><div class="bar"><div class="fill" style="width:${Math.min(100,s.atk)}%"></div></div></div>
<div class="stat"><div class="statline"><span>Q 피해량</span><b>${Math.round(s.q)}</b></div><div class="bar"><div class="fill" style="width:${Math.min(100,s.q/3)}%"></div></div></div>
<div class="stat"><div class="statline"><span>Q 쿨타임</span><b>${s.cd.toFixed(1)}초</b></div><div class="bar"><div class="fill" style="width:${Math.min(100,(14-s.cd)/14*100)}%"></div></div></div>`;
}
function getAfter(){return {hp:100,atk:+atk.value,q:+q.value,cd:+cd.value}}
function update(){
atkOut.value=atk.value;qOut.value=q.value;cdOut.value=(+cd.value).toFixed(1)+'초';
beforeStats.innerHTML=statHTML(base);afterStats.innerHTML=statHTML(getAfter());
}
function resetBattle(){
clearInterval(timer);hp1.style.width='100%';hp2.style.width='100%';log.textContent='대기 중 — 슬라이더를 조정한 뒤 전투를 시작하세요.';
damage.className='damage';damage.textContent='-';
}
function startBattle(){
resetBattle(); const a=getAfter(); let p1=100,p2=100,t=0;
log.textContent='시뮬레이션 시작 — 공격력과 Q 피해량을 기준으로 간단히 계산합니다.';
timer=setInterval(()=>{
t+=.5;
if(t%1<.01){p2=Math.max(0,p2-a.atk/180*100); showDamage(Math.round(a.atk));}
if(Math.abs((t%a.cd)-0)<.06){p2=Math.max(0,p2-a.q/7);showDamage(Math.round(a.q),'Q');}
p1=Math.max(0,p1-2.1);
hp1.style.width=p1+'%';hp2.style.width=p2+'%';
if(p2<=0||p1<=0){clearInterval(timer);log.textContent=p2<=0?'시뮬레이션 종료 — 패치 후 노틸러스가 승리했습니다.':'시뮬레이션 종료 — 상대가 버텼습니다.';}
},50);
}
function showDamage(n,label=''){
damage.textContent=(label?label+' ':'')+'-'+n;damage.className='damage';void damage.offsetWidth;damage.className='damage show';
}
update();
</script>
</body>
</html>

아레나, 무작위 총력전, 현재와 클래식 소환사의 협곡 모두 변화가 찾아옵니다. 롤(리그오브레전드) 패치노트를 알아보고, 게임기획자가 배울 수 있는 점에 대해서 알아보려고 합니다. 1. 게임 기획자의 눈으로 보면 롤 패치 노트만큼 좋은 교재가 없다 수백만 명이 즐기는 거대한 라이브 서비스 게임, . 라이엇 게임즈는 매 패치마다 수십 개의 챔피언과 아이템, 시

우리들의 게임 발매 이야기

안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.

아레나, 무작위 총력전, 현재와 클래식 소환사의 협곡 모두 변화가 찾아옵니다. 롤(리그오브레전드) 패치노트를 알아보고, 게임기획자가 배울 수 있는 점에 대해서 알아보려고 합니다. 1. 게임 기획자의 눈으로 보면 롤 패치 노트만큼 좋은 교재가 없다 수백만 명이 즐기는 거대한 라이브 서비스 게임, . 라이엇 게임즈는 매 패치마다 수십 개의 챔피언과 아이템, 시


안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.