무기를 강화하고, 깨지면 처음부터 다시. 친구들과 함께하는 확률 강화 RPG 웹게임
Translation pending
GamesJavaScript · CSSGitHub @beartang2OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗다같이 아무 생각 없이 무기를 강화하고, 깨지면 처음부터 다시 하는 확률 RPG 웹게임. 브라우저로 접속해서 함께 즐깁니다.
▶️ 플레이: https://ganghwa.beartanh.dev
초창기엔 카카오톡 단톡방 봇이었지만 지금은 웹 게임으로 전환했어요. 옛 카톡 봇 구현은
legacy/에 보관돼 있습니다.
⚒️ 강화 — 골드로 무기 강화(+0~99). 로스트아크식으로 고레벨일수록 성공률이 급감하고
대부분 실패. 실패가 쌓이면 🔨장인의 기운이 차고 100%면 확정 성공.
🔥 기운 보정: 기운이 찰수록 성공률 + 기운 × 2%p(pityLuckMax, withLuck) — +98 에서 기운이 다 차기 전 자연 성공 12% → 약 53%.
💎 프리즘 무기(★1+) — 초월하면 등급이 💎 프리즘(PRISM_GRADE, 강화 수치 무관)이 되고 속성은 유지.
전투 레벨 combatLevel = 강화 + 100 × ★ (+99 에서 초월 = 100레벨) — 레이드·던전 공격력(memberStats)·싸움 전투력·보스 입장 레벨이 본다.
강화 비용(enhanceCost = 20 + 10 × 전투 레벨, ★1 +0 1,020G)·사냥 몬스터·골드도 전투 레벨. 프리즘 무기 강화 성공률은 prismSucc 0.5% 고정(★ 이 올라도 그대로),
파괴 구간은 −1강(장인의 기운·속성 유지 — 금이 갔다). ★ 1개 다시 올리기 ≈ 5,500번 시도 · ★1 약 830만G(하루 수입 ≈ 사냥 10만 + 거인 45만 + 미션 → 약 2주).
★ 보스 HP 를 전투 레벨에 맞춤(거인 65,000 · 공허 230,000 — ★1/★3 +0 에서 마계 군주를 +99 로 잡는 정도), 초월 던전 HP 도 다시 맞춤(DUNGEON.bands).
💥파괴되면 한 단계 뒤로(등급 바닥 또는 −15레벨 중 높은 쪽) — 🛡️방지권으로 방어(하루 3개 구매 제한, 나머지는 사냥 드랍).
🌈 초월 — +99 도달 후 재료(💠사냥 파편 · 🌟레이드 정수)를 모아 초월하면 무기가 +0 으로 돌아가고 영구 **★**을 얻어요. ★1부터는 방지권이 통하지 않습니다.
✨ 직업 — 근딜(검)·원딜(활)·탱커(방패)·힐러(지팡이). 레이드에서 역할이 다름.
🔥 무기 속성 — 불·물·대지·바람·번개·얼음·빛·어둠·독 9종(랜덤). 등급·속성별 이미지.
💰 골드 수급 — 출석 / 🗡️사냥(하루 20회 + 이후 ♾️무한 사냥) / ⛏️채굴장(기력 관리형
곡괭이질·노다지·숙련도) / ⚔️싸움 승리(상대 골드 약탈). 싸움 무기 손상(10%·−1강)은 걸려 온 싸움에서 진 방어자만 — 건 사람은 져도 골드만 잃는다. 방지권(★0)이 있으면 1장 써서 막는다(guarded).
싸움 승률 fightOdds = 1/(1+(상대/나 전투력)^10), 2~98% · 전투력 fightPower = (12+8×강화)×(1+8%×★). 싸움 탭은 GET /api/fight-list 로 상대별 내 승률을 받는다.
🐲 파티 레이드 — 파티를 만들어 초대·수락하고 보스 처치. 전투를 타임라인으로 다같이 관전.
🌟 정수(참가자 전원 확정): 고블린 1 · 골렘 3 · 드래곤 7 · 마계 10 · 거인 20 · 공허 30 — ★3 까지는 하루 레이드 3회로 다음 ★ 정수(20·40·60)가 모인다(테스트 '정수 페이스').
💥 치명타(CLASS_CRIT, 화면 CRIT 와 같아야 함 — 테스트): 전사 22%·×1.9 · 힐러 17%·×1.7 · 궁수 12%·×2.4 · 탱커 8%·×1.5.
사냥(몬스터당 1번)·레이드·던전(연타는 타마다, 강공격은 1번)에 붙고 스킬엔 없다. 연타 묶음에 치명타가 있으면 화면에 그 묶음 피해를 💥 로 띄운다.
혼자 레이드의 탱커·힐러는 공격 계수를 raidSoloSupportAtk(탱커 1.0 · 힐러 0.8)로 올린다(×1.67·×1.6, raid.soloMult) — +99 면 어느 직업이든 마계 군주 솔로 가능(REAL=200 node tools/sim-raid.js 7 99 0).
전투 15초, 혼자면 20초(raidSoloDuration — 1인당 보스 체력이 파티보다 많아서). 힐러는 파티 공격력 업(atkBuff, 합계 최대 +15%, 자신 포함).
밸런스 확인: node tools/sim-raid.js [초당 연타] [레벨] [★] — 혼자 기준 직업·플레이 방식별 처치 시간.
🎯 미션·시즌 패스 보상 — 꾸러미 { gold, enh, prism, shard, essence, boxkey, stone, protect, boost, hammer, prismdye, slots }.
골드 = gold + enh × 강화 1회 비용(최고 레벨 best·최고 ★ ascendMax 기준 — 초월 직후에 받아도 손해 없고 미룰 이유도 없음).
가방에 다 안 들어가면 수령을 막는다(bundleFits, 미수령 유지). 패스 무료 30레벨 합계 💠300 · 🔮60 · 🗝️20 · 🛡️6 · 💎45 · 🌟45 · 🔨3.
🎒 인벤토리 — 10칸 시작(칸당 999개 스택 — 칸은 아이템 종류 수로 찬다). 상점 확장 패키지(1회) +4칸, 배틀패스 프리미엄 Lv.15 +4칸 → 최대 18칸. 방지권·부스트권·염색약·초월 재료·상자 열쇠·마석이 전부 여기로.
🛒 상점 — 아이템을 인벤토리로 지급. 염색약은 가방에서 '사용하기'로 발동. (직업 변경권은 판매 종료 — 장비 칸으로 대체)
🗡️ 장비 칸 — 무기를 직업당 한 자루씩 최대 4자루. 무기마다 강화·★·속성·장인의 기운이 따로이고,
장착한 무기가 직업을 정한다. 칸은 💎 프리즘 상점에서 — +99 를 찍은 무기 한 자루마다 한 칸(★ 초월한 무기 포함)을
살 수 있어서, 가진 칸을 다 채워 +99 까지 키워야 다음 칸이 열린다. 가격 70 → 140 → 210💎
(첫 칸 = 첫 무기를 +99 로 키우는 동안 모이는 💎 평균 × 1.2, 그 뒤 2배·3배 — web/tools/sim-climb.js 기준
보통 유저 칸마다 약 18 → 17 → 25일). 랭킹은 가장 좋은 무기 기준.
🔁 속성 상성 — 💧물→🔥불→❄️얼음→🌪️바람→☠️독→⛰️대지→⚡번개→💧물 순서로 앞이 뒤를 이기고(피해 ×2, 반대는 ×0.5), ✨빛⇄🌑어둠은 서로 ×2. 🔁 속성 재련권(상점 10만G, 직업 변경권 대체)으로 🟣에픽(+25) 이상 무기의 속성을 다시 뽑는다 — 대신 강화 수치의 10%가 깎인다. 남아 있던 직업 변경권은 재련권으로 1:1 이관.
🌌 초월 던전 (엔드 콘텐츠, ★1 무기가 있어야 입장) — 레이드 탭의 두 번째 화면. 혼자 연타로 층을 오른다. 매주 월요일 초기화 · 층마다 보스 속성이 주차 시드로 새로 섞이고, 지난주 기록 −5층까지 자동 소탕.
| 구간 | 층 | 조건 | 전투 |
|---|---|---|---|
| 입구 | 1~15 | 무기 1자루 | 속성 1개 — 아무 무기로 밀다가 막히면 약점 무기로 |
| 중층 | 16~30 | 무기 2자루 | 전투 중 속성 2단계 → 바꿔 끼며 싸움(교체 쿨 1.2초) |
| 심층 | 31~45 | 무기 3자루 | 3단계 |
| 심연 | 46~50 | 무기 4자루 | 4단계 |
무기마다 직업 스킬 1회 + ★1 이상이면 속성 스킬 1회(🔥화염 폭발·💧치유의 비·⛰️대지의 방벽·🌪️질풍·⚡낙뢰·
❄️빙결·✨성광·🌑흡혈·☠️맹독). 탱커를 들고 있으면 피해감소, 힐러를 들고 있으면 회복이 붙는다.
🛡️ 보스 보호막: 스킬 한 번(즉시 피해 + 그 스킬의 지속 피해)으로는 보스 최대 체력의 40%까지만 깎인다 — 낮은 층도 연타가 필요.
보상: 층 돌파 💠파편(5·10층마다 🌟정수), 처음 넘는 층 💎3, 10·30·50층 칭호, 주간 최고층 랭킹.
web/tools/sim-dungeon.js 기준(초당 연타 7): 속성 운에 맡기면 +99 무기들로 1117층, 단계마다 약점 무기를 맞추면
2자루 30층 · 34자루 ★1 36층 · ★23 4345층. 정상(50층)은 ★3 이상 4자루 + 빠른 연타.
💎 프리즘 — 골드와 별개인 두 번째 재화. 확률표를 화면에 그대로 공개한다.
| 얻는 곳 | 방법 | 기대값 |
|---|---|---|
| 📦 상자 | 🗝️ 상자 열쇠(사냥 드랍) 1개로 상자 3개 중 하나 선택, 나머지 둘 내용도 공개 | 열쇠당 💎0.54 (💎 나올 확률 30.5%) |
| ⚗️ 연금술 | 🔮 마석(사냥 드랍) + 골드. 약불(5+2만G)·중불(15+10만G)·강불(40+40만G) | 💎0.82 · 3.04 · 10.05 (꽝 40 · 30 · 20% — 불이 셀수록 덜 꽝) |
| 🧸 캡슐 | 골드만(1회 3만G, 10연 가능, 무제한). 골드 환급·마석도 나옴 | 회당 💎0.37 (💎 나올 확률 20.7%, 💎당 약 6.5만G) |
프리즘 상점: 🗡️ 장비 칸 +1(+99 무기 조건) · 🫧 프리즘 염색약 60(상점 전용 오로라색 닉네임) · 🔨 장인의 망치 8(장인의 기운 +50%) · 🎁 초월 꾸러미 25(파편 30 + 정수 3). 열쇠·마석은 무한 사냥에서도 나오지만 확률이 낮다(열쇠 6% → 1.5%, 마석 45% → 12%).
🏅 랭킹 / 💰부자 / 🕯️추모(오늘 무기가 많이 깨진 사람) / 📜로그.
⚙️ 설정 — 오른쪽 위 ⚙️. 내 계정(닉네임·로그인 방식) · 효과음 · 📳 진동 · 공지사항 · 플레이 방법 · 로그아웃 · 회원 탈퇴.
휴대폰은 화면 전체, 넓은 화면은 가운데 창. 진동은 안드로이드는 Vibration API, 아이폰 사파리는 API 가 없어서
스위치 체크박스(<input type=checkbox switch>, Safari 17.4+) 햅틱을 빌린다(비공식). iOS 26.5 부터 스크립트로 누른
label.click() 은 햅틱이 안 나서(WebKit 버그 309082), 진동 대상 버튼 위에 투명 <label class="hx">(안에 숨긴 스위치)을
덮어 손가락 탭이 직접 라벨에 닿게 한다 — 그래서 아이폰은 '누르는 순간 톡 1번' 만 되고 결과별 진동 패턴은 안드로이드 전용.
끝난 레이드·던전 결과는 1분 동안만 다시 보여 준다(RESULT_KEEP_MS) — 그 뒤 탭에 들어오면 로비.
📢 광고(애드센스) — 게시자 ca-pub-3744140142372436(상위 도메인 beartanh.dev 와 같음, ads.txt 도 거기 하나로 서브도메인까지).
app.js 의 ADS.slots.side / more 에 애드센스 '디스플레이 광고 단위' 번호를 넣으면 그 칸만 열린다(비면 스크립트도 안 불러옴).
위치: 넓은 화면 오른쪽 단 맨 아래 · 더보기의 읽는 화면(랭킹·부자·추모·로그) 아래만 — 로그인·대장간·사냥·레이드·전투·상점엔 없음.
칸마다 한 번만 채운다(탭 오갈 때 새로 받지 않음). 자동 광고가 켜져 있으면 게임 화면에도 들어올 수 있으니 주의.
⚡ 강공격 커맨드(사냥터 · 파티 레이드 · 초월 던전) — 장착 무기마다 그리는 커맨드가 다르다. 인식은 public/gesture.js(노드 테스트 npm run test:gesture).
⚔️ 검 = 원의 호 · 🏹 활 = 몬스터 반대쪽으로 당겼다 놓기(당긴 길이 = 위력 40~100%) · ✨ 지팡이 = 별 한 붓($1 Unistroke Recognizer) + 마력 공명(5초 연타 ×1.5) · 🛡️ 방패 = 0.8초 꾹.
위력은 연타 n회분(검 6 · 활 8 · 지팡이 22 · 방패 5), 강공격 뒤 일반 공격 간격의 2배 동안 다음 공격 대기. 사냥은 결과를 서버가 미리 정하므로 클라이언트만 —
레이드·던전은 POST /api/raid-strong·/api/dun-strong {power} — 서버(STRONG_ATTACKS)가 위력(연타 n회분, 던전은 상성 배율까지)·
직업별 쿨타임(검·활 0.35초 · 방패 0.75초 · 지팡이 0.9초)·마력 공명(레이드 연타 ×1.5 / 던전 haste 버프)을 판정하고 강공격 기록도 센다.
화면은 무대(ARENA: hunt·raid·dun)마다 과녁·무기(던전은 지금 낀 무기)·탭·강공격을 정한다.
무기마다 다른 트레일(검빛·활시위·마법 잉크·방패 링).
일반 공격은 손을 뗄 때(pointerup) 판정한다 — 거의 안 움직였으면 탭, 끌었으면 커맨드, 방패를 0.2초 넘게 눌렀으면 꾹 누르기라
일반 공격과 강공격이 섞이지 않는다(누르는 순간엔 보스가 살짝 눌리기만). 손가락마다 따로 세서 두 손가락 번갈아 연타도 OK.
별은 시작 20%·끝 10% 의 군더더기 선을 잘라 보고 판정(몬스터를 누르고 꼭짓점까지 들어가는 선 허용).
🛡️ 매크로 방지(속도 하한 = 사람 최고 속도보다 아주 조금 빠르게) — 화면 코드는 숨길 수 없으니 서버 규칙으로 막는다.
사냥: 요청 사이 최소 0.75초(huntMinGapMs, 사람 최단 주기 ≈ 한 방 처치 0.15초 + 다음 몬스터 0.65초 + 통신). 걸리면 보상·횟수 변화 없이 거절, 화면은 조용히 다시 요청.
레이드·던전: 연타와 강공격(연타 n회분)을 경과시간 예산 하나(초당 12.5타 + 12)로 센다 — 매크로가 연타 상한을 채우며 강공격까지 얹지 못한다.
남은 빈틈: 속도는 막아도 매크로는 24시간 돈다 → 무한 사냥 드랍(열쇠·마석)은 하루 상한으로 따로 막아야 한다.
🖐️ 게임 화면은 글자·이미지 끌어 선택·꾹 누르기 메뉴를 막는다(입력칸·링크는 예외).
🏷️ 칭호 누적 기록(단조 증가, game.js atkN/atkS/dStat/gStat) — p.atk 일반·강공격(무기별) · p.ds 초월 던전(돌파·약점 타수·교체·속성 스킬·무피격 심층 돌파) · p.gs 프리즘 도박(상자·연금·캡슐과 각 최고 칸·꽝).
사냥 공격 수는 클라가 다음 hunt 요청에 얹거나 창을 닫을 때 atk-report 로 보고 — 서버는 한 번에 일반 20·강공격 4, 그리고 지난 보고 이후 흐른 시간(0.07초·0.3초에 1번)만큼만 센다.
레이드·던전 연타는 서버가 이미 검증한 타수를 그대로 더한다. 프로필 칭호는 아코디언(처음엔 접힘, 장착/해제로 다시 그릴 땐 펼친 채).
🥚 이스터에그 — 🌈 프리즘 등급 숨은 칭호(각각 1회 bool, p.eggs). 진열장에선 이름·등급을 감춘 ❓, 남의 프로필 응답엔 얻는 법이 실리지 않는다.
목록·조건은 일부러 여기 적지 않는다(game.js 의 hidden: true 칭호 참고). 클라 판정분은 POST /api/egg {id}(사냥터 것은 최근 5분 안에 사냥했어야 인정).
🔨 개발자용 4종은 단서 체인으로 이어진다(콘솔 인사말 → 응답 헤더 X-Blacksmith → 숨은 주소 → HTTP 418 / HTML 소스 주석 → 키보드).
키보드 정답 문구는 코드에 두지 않고 SHA-256 해시로만 비교한다. 헤더 값은 ASCII 만 가능해서 영어.
❔ 플레이 방법 — 카테고리 탭(⚒️강화 · 🗡️사냥 · ⚔️싸움 · 🐉레이드 · 💰재화). 사냥 탭의 직업별 강공격은 STRONG 표로 그려서 수치가 같이 바뀐다.
🔒 개인정보처리방침 — public/privacy/index.html(/privacy/). 설정 메뉴와 로그인 화면 아래에 링크. 받는 정보나 광고를 바꾸면 시행일과 같이 고친다.
🗑️ 회원 탈퇴 — ⚙️ 설정 → 닉네임을 그대로 다시 입력해야 버튼이 열린다. 캐릭터·일일 기록·상한·모든 기기 세션을 지우고, 파티장이면 파티를 해산한다(되돌릴 수 없음). 이메일 연결 계정은 연결만 풀리고 Supabase Auth 사용자 자체는 남는다 (지우려면 서비스 키가 필요해서 — 같은 이메일로 다시 로그인하면 새 캐릭터를 만들 수 있다).
게임은 전부 web/ 에 있고, 두 가지로 띄울 수 있어요:
| 방식 | 설명 | 가이드 |
|---|---|---|
| 로컬/상시 서버 | 맥·PC를 Node 서버로 (node server.js), 같은 네트워크에서 접속. SQLite 저장. | web/README.md |
| Vercel + Supabase | 서버리스 + 관리형 Postgres 로 공개 URL 호스팅. | web/VERCEL-MIGRATION.md |
빠른 로컬 실행:
cd web
npm install
npm start # 또는 npm run dev (nodemon)
# 터미널에 뜨는 http://<로컬IP>:3088 주소를 공유
web/ 웹 게임 (프론트 public/ + 서버 server.js + 로직 game.js)
public/fx.js 시각 효과 — React Bits 컴포넌트 바닐라 JS 이식 (MIT + Commons Clause, 파일 머리말 참고)
public/weapon-art.js 무기 그림 생성기 — 직업 4 × 속성 9 × 등급 5 = 180종 SVG (이미지 파일 불필요)
public/prism-art.js 💎 프리즘 탭 그림 — 상자 3종·연금술 도가니·캡슐 기계·캡슐·보상 아이콘 SVG
api/ Vercel 서버리스 어댑터 (game.js 재사용)
db/ 로컬 어댑터 테스트 (pglite)
supabase/ Supabase 마이그레이션 (GitHub 연동 자동 적용)
legacy/ 초기 카카오톡 봇 (보관용)
배치 — 화면 폭에 따라 세 가지로 바뀐다(전부 style.css 끝의 '화면 배치' 블록).
| 폭 | 배치 |
|---|---|
| < 880px (휴대폰·태블릿) | 앱처럼 상단바 + 빠른 아이콘 줄(출석·가방·미션·패스) + 한 화면 + 하단 탭바(대장간·사냥·레이드·프리즘·더보기). 대장간은 무기 그림이 남는 높이에 맞춰 줄어들어 스크롤 없이 한 화면, 레이드·던전 전투는 화면 전체로 열린다 |
| 880~1279px | 두 단 — 왼쪽 대장간(고정) · 오른쪽 탭 화면 |
| ≥ 1280px | 세 단 — + 오른쪽에 오늘 미션 · 강화 랭킹 · 실시간 로그 |
알림(토스트)은 화면 위쪽에 성공 초록 · 안내 주황 · 실패 빨강의 반투명 유리판으로 뜨고, 클릭은 밑으로 통과한다.
대장간 테마(그을음·무쇠·놋쇠·쇳물). 빌드 없는 바닐라 JS 를 유지하려고 React Bits 컴포넌트를
web/public/fx.js 로 이식했다 — 원본 알고리즘·셰이더는 그대로, React 훅만 일반 객체로 바꿨다.
| 원본 (React Bits) | 쓰는 곳 |
|---|---|
| Particles | 화면 아래에서 떠오르는 화로 불씨 (#embers) |
| ClickSpark | 강화·사냥·채굴·레이드 탭 불꽃, 강화 결과 버스트 |
| StarBorder | 강화 버튼 테두리 빛 |
| ElectricBorder | 장인의 기운 100%(다음 강화 확정)일 때 화로 패널 |
| GradientText | 전설·초월 무기 이름 |
| ShinyText | 로그인 타이틀 |
| Counter | 상단 골드 숫자 |
| PrismaticBurst | 💎 프리즘 대박(상자 💎5+·연금 💎10+·캡슐 💎10+) 순간 한 번 터지는 분광 폭발 |
| GlareHover | 아직 안 연 상자 위를 번갈아 훑는 광택 |
fx.js 로드 실패나 WebGL2 미지원이면 해당 효과만 빠지고 게임은 그대로 동작한다. prefers-reduced-motion 을 존중한다.
web/public/weapon-art.js)180장을 그리는 대신 부품을 겹쳐 그린다 — 형태는 직업(검·활·방패·지팡이), 금속은 등급 (무쇠 → 푸른 강철 → 흑강+자수정 → 황금 → 결정), 속성은 기호 대신 재질과 현상으로 드러낸다.
| 속성 | 금속·결정 표면 | 나무 부분(일반 방패·낮은 등급 활대·지팡이 자루) | 둘레 효과 |
|---|---|---|---|
| 불 | 식은 쇳물 + 빛나는 균열 | 그을림 + 불씨 | 위로 피어오르는 불꽃 |
| 물 | 물결 빛 + 파문 + 광택 | 물먹은 결 + 물방울 | 맺혀 떨어지는 물방울 |
| 대지 | 판석(방패) · 화강암 결 · 정동(보주) | 진흙 + 자갈 | 떠다니는 돌조각 |
| 바람 | 소용돌이 결 + 잎 | 바람 긁힘 + 잎 | 휘감는 바람결 |
| 번개 | 먹구름빛 + 갈라지는 번개 · 플라스마(보주) | 벼락 자국 | 튀는 번개 |
| 얼음 | 깎인 결정면 + 서리꽃 | 서리 | 고드름 · 결정 |
| 빛 | 퍼지는 광휘 | 볕에 바램 + 새는 빛 | 반짝임 · 광선 |
| 어둠 | 별 박힌 성운 + 새는 균열 | 썩음 + 보랏빛 실핏줄 | 피어오르는 그림자 |
| 독 | 거품 + 부식 + 흘러내리는 진액 | 독 곰팡이 | 떨어지는 독방울 |
재질은 일반 등급부터 은은하게 깔리고 등급이 오를수록 진해진다. 활은 화살촉에도 속성 현상이 실린다(희귀부터). 등급이 오를수록 가드가 날개·후광으로 커지고, 전설부터는 둘레 효과가 움직인다.
WeaponArt.svg({ cls: 'warrior', element: 'fire', grade: 'legend' }) // → '<svg …>'
직접 그린 PNG 를 쓰고 싶으면 app.js 의 USE_WEAPON_PNG = true (규칙은 web/public/weapons/README.md).
일부만 있으면 화풍이 섞이니, 한 직업 분량을 다 채웠을 때 켜는 걸 권장.
web/game.js 상단 CONFIG 와 확률 앵커(SUCC_ANCHORS/DESTROY_ANCHORS),
enhanceCost(), RARITIES, BOSSES 를 고치면 됩니다.
확률·보상을 바꾼 뒤에는 등반 시뮬레이터로 '+0→+99 에 며칠 걸리고 💎 가 얼마나 모이는지' 를 다시 확인하세요.
실제 game.js 함수를 그대로 호출하고 시계만 가짜로 돌립니다(라이트·보통·헤비 유저 × 무기 교체 여부).
cd web && node tools/sim-climb.js 300 # 계정 300개씩 — 장비 칸 가격(CONFIG.weaponSlotPrices) 근거
node tools/sim-climb.js 200 --prices 70,140,210 # 가격안별 '+99 후 며칠 더 모아야 사는지'
node tools/sim-dungeon.js 60 7 # 초월 던전 — 장비별 도달 층(층 HP·위험도 DUNGEON 튜닝용)