스타듀밸리 낚시 미니게임을 화면 인식 + 마우스 제어로 자동 플레이하는 봇입니다.
운용 방식은 "보조 모드"입니다. 캐스팅과 후킹("!")은 사용자가 직접 하고, 미니게임이 뜨면 봇이 초록 캐치 바만 물고기에 맞춰 제어합니다. (완전 자동은 지원하지만 안정성 문제로 현재 권장하지 않습니다.)
작은 창의 [시작]/[종료] 버튼 하나로 켜고 끕니다. 자동 종료 없이 버튼으로만 정지합니다.
StardewAutoFishing.exe와config.json을 같은 폴더에 둡니다.- 스타듀밸리를 실행합니다(1920×1080).
StardewAutoFishing.exe실행 → 좌상단에 작은 창이 뜹니다.- [시작] 클릭 → 버튼이 [종료] 로 바뀝니다.
- 평소처럼 낚시하세요. 미니게임이 뜨면 봇이 바를 제어합니다.
- 그만할 땐 창의 [종료] 클릭. (창이 게임 뒤로 가면 Alt+Tab으로 불러오세요.)
exe가 무거우면(용량/실행) 아래 "소스로 실행"을 사용해도 동일하게 동작합니다.
pip install -r requirements.txt
python assist_gui.py또는 start_assist.bat 더블클릭(콘솔 없이 pythonw로 GUI 실행).
- [시작]: 화면 감시 시작. 버튼이 [종료]로 바뀝니다.
- 미니게임 진입 시 창에
미니게임 제어중 bar=.. fish=..표시. - [종료]: 정지. 마우스 버튼을 놓고 다시 [시작] 상태로.
- 자동 종료 없음: ESC나 다른 작업으로 절대 꺼지지 않습니다. 오직 [종료] 버튼(또는 창 닫기)으로만 멈춥니다.
라이브 검증 + 바 물리 실측 결과입니다.
| 물고기 | 결과 |
|---|---|
| 일반 ~ 빠른 물고기 | 잘 잡습니다 (바가 물고기를 바짝 추적) |
| 매우 빠른 / 급진동(erratic) 물고기 | 물리적 한계로 놓칠 수 있습니다 |
매우 빠른 물고기를 놓치는 것은 튜닝 문제가 아니라 게임 낚시 바 자체의 물리 한계입니다.
calib_bar.py로 실제 바의 가속도(약 780 px/s²)와 최고속도(약 920 px/s)를 측정했는데,
물고기가 바의 최고속도보다 빠르게 급반전하면 바가 물리적으로 따라갈 수 없습니다.
이런 극단적으로 빠른 물고기는 수동 플레이가 정답입니다.
mss로 미니게임 트랙 영역(ROI)만 초당 60회 캡처합니다.- OpenCV(HSV)로 초록 캐치 바(H≈43)와 물고기 표식(청록 H≈96)의 세로 위치를 찾습니다.
- 물고기는 색상(Hue)으로 트랙 바닥의 파란 물과 구분합니다.
- 물고기가 바를 가로질러 초록이 두 조각으로 갈라져도, 조각들을 합쳐 바 중심을 안정적으로 잡습니다.
- 속도 예측 제어(BarController): 바 중심 + (최근 속도 ×
lookahead)가 물고기보다 아래면 눌러서 올리고, 위로 지나칠 것 같으면 미리 뗍니다. 관성 오버슈트를 막고 물고기를 바 안에 유지합니다. pydirectinput으로 마우스 좌클릭을 눌렀다/뗐다 하며 바를 올리고 내립니다.- 검출이 순간 끊겨도(
bar_grace) 직전 동작을 유지해 제어 연속성을 지킵니다.
보조 모드는 사용자가 게임을 직접 플레이 중이라 게임 창이 이미 포그라운드입니다. 그래서 봇은 창 포커스를 건드리지 않습니다(과거 매 프레임 재포커스가 게임을 멈추게 한 문제를 제거).
좌표는 1920×1080 기준입니다. 해상도/창 위치나 낚시터가 다르면 아래로 다시 잡으세요.
| 키 | 의미 |
|---|---|
roi |
초록 바가 오르내리는 세로 트랙 영역 |
bar_hsv_lower/upper |
초록 캐치 바 색 범위 |
fish_hsv_lower/upper |
물고기 표식(청록) 색 범위 |
lookahead |
예측 시간(초, 현재 0.20). 위로 튀면 ↑, 못 따라가면 ↓ |
vel_window |
속도 추정 구간(초). 검출 떨림에 강하게 |
min_pulse |
최소 클릭 유지(초). 안 올라가면 ↓, 덜덜 떨면 ↑ |
bar_grace |
바 순간 끊김 무시 시간(초) |
fps |
초당 처리 횟수 |
lookahead=0.20은 실측한 바 물리(가속이 완만함)에 맞춰 튜닝한 값입니다.
python main.py calibrate # 미니게임 트랙(ROI) 영역 다시 선택
python main.py tune # 초록바/물고기 마스크 실시간 확인python calib_bar.py # 흔한 물고기 미니게임에서 사각파 입력 → 바 가속도 G, 최고속도 VMAX 측정
python sim_tune.py # 오프라인 시뮬레이터로 lookahead 등 파라미터 스윕(게임 불필요)sim_tune.py는 측정한 바 물리에 앵커링된 시뮬레이터로, 빠른 물고기 대응 파라미터를 실험합니다.
| 파일 | 설명 |
|---|---|
assist_gui.py |
보조 모드 GUI (시작/종료 버튼). 메인 실행 파일 |
start_assist.bat |
GUI를 콘솔 없이 실행하는 런처(pythonw) |
build_exe.bat |
PyInstaller로 exe 빌드 |
main.py |
검출·제어(BarController)·설정·마우스 입력 등 핵심 로직 |
calib_bar.py |
바 물리(G, VMAX) 실측기 |
sim_tune.py |
오프라인 미니게임 시뮬레이터 + 파라미터 튜너 |
assist_run.py |
구 콘솔 버전 보조 모드(ESC 종료). GUI로 대체됨 |
gui.py |
완전자동용 구 GUI (현재 미사용) |
config.json |
튜닝된 설정값 |
- 개인 싱글플레이 편의용으로만 사용하세요.
- 실행 중에는 마우스 좌클릭을 자동 조작합니다.
- 비 오는 날은 피하세요: 초록 빗방울이 캐치 바로 오검출될 수 있습니다.
- exe만 옮길 때는
config.json을 같은 폴더에 함께 두세요(없으면 내장 기본값 사용). - 게임을 관리자 권한으로 실행했다면 봇도 관리자 권한이 필요할 수 있습니다(Windows 입력 제한).