OhMyGame
OhMyGame은 AI로 게임을 만들 수 있는 오픈소스 스튜디오로, 디자인·구축·플레이테스트·출판을 하나의 앱에서 모델 키와 함께 수행합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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 튜닝용)