KeepWorlds

발헤임 난이도 조절과 도전과제: 전용 서버(데디 서버) 세계 보정 실측 정리

발헤임 전용 서버(데디 서버)에서 난이도를 바꾸는 세계 보정을 직접 실측했어요. 사전 설정과 -modifier가 실제로 쓰는 값, -setkey를 제대로 쓰는 법, 사망 패널티와 도전과제가 비활성화되는 조건까지 정리했어요.

발헤임에서 월드를 만들 때 고르는 난이도와 규칙, 그러니까 전투, 사망 시 불이익, 자원, 습격, 포탈과 몇 개의 체크 박스를 게임에서는 세계 보정이라고 불러요. 그런데 전용 서버(데디 서버)에는 이 메뉴가 없어서 실행 인수로 설정해야 해요. 대부분의 가이드는 그 인수 목록을 나열하는 데서 끝나요.

저희는 발헤임 전용 서버를 직접 운영하고 있어서, 인수 하나하나가 월드에 실제로 무엇을 쓰는지 실측했어요. 1.0.16 전용 서버에서 수십 가지 조합을 돌리고 1.0.17에서 다시 확인했고, 매번 월드 파일을 직접 읽어 봤어요. 파일만으로 답이 안 나오는 부분은 게임 코드까지 확인했어요. 많은 분들이 의외라고 느끼는 결과는 네 가지예요.

  • 세계 보정은 월드 파일 안에 저장돼요. 실행 인수를 지워도 아무것도 바뀌지 않아요.
  • -modifier는 기존 값을 바꾸는 게 아니라 위에 덧붙여요.
  • -setkey의 숫자는 키 이름과 같은 인수 하나로 넘겨야 해요. 그렇지 않으면 숫자가 조용히 버려져요.
  • 게임 메뉴에 없는 설정을 하나라도 쓰면 그 월드에서는 도전과제가 비활성화돼요.

세계 보정은 어디에 저장되나

월드의 메타데이터 파일, 즉 월드 본체가 들어 있는 .db 옆의 .fwl(1.0의 저장 구조에서는 .fwl2와 .db2)에 키 목록으로 저장돼요. .db 안에는 없어요. 서버는 월드를 불러올 때마다 세계 보정 키를 모두 지운 뒤 이 목록에서 다시 읽어 와요. 그래서 설정이 저장되는 곳은 월드 파일 하나뿐이에요.

여기서 몇 가지가 따라와요.

  • 실행 인수를 지워도 설정은 그대로예요. 다음 실행에서도 월드에 이미 들어 있는 값을 그대로 써요.
  • 백업을 복원하면 세계 보정도 함께 돌아가요. 지난주 화요일로 되돌리면 난이도도 그날 상태로 돌아가요.
  • 가져온 월드는 자기 설정을 그대로 가지고 와요. 혼자 하던 월드를 서버로 옮기거나 다른 호스팅에서 이전해 오면, 만들 때 정한 세계 보정이 그대로 따라와요.
  • 파일에는 다음 저장 때 반영돼요. 서버는 30분마다, 그리고 정상 종료할 때 월드를 저장해요. 인수를 바꾸고 재시작한 직후에 파일을 열면 아직 예전 목록이 보이지만, 게임 안에서는 이미 새 설정이 적용돼 있어요.

실행 인수 네 가지

인수하는 일
-preset <이름>세계 보정을 모두 지운 뒤 사전 설정을 적용해요: normal, casual, easy, hard, hardcore, immersive, hammer
-modifier <종류> <단계>combat, deathpenalty, resources, raids, portals 중 하나만 바꾸고 나머지는 건드리지 않아요
-setkey <키>키 하나를 그대로 추가해요. 메뉴에 없는 키도 받아요
-resetmodifiers세계 보정을 모두 지워요. 서버에 함께 들어 있는 매뉴얼에는 없지만 동작해요

인수는 적은 순서대로 왼쪽부터 처리돼요. 이름과 단계는 대소문자를 가리지 않아요. 사전 설정이나 단계 이름을 잘못 적어도 서버는 멈추지 않아요. Could not parse로 시작하는 로그 한 줄만 남기고, 월드에 원래 있던 세계 보정으로 그대로 시작해요.

-modifier가 이전 설정을 지우지 못하는 이유

-modifier는 고른 단계에 해당하는 키만 추가하거나 덮어써요. 그 단계가 쓰지 않는 키는 그대로 남아요. 예를 들어 '어려움' 사전 설정으로 시작한 월드를 나중에 -modifier combat veryeasy로 바꾸면, '어려움'이 남긴 enemyleveluprate 120이 그대로 남아요. 나머지는 '매우 쉬움'인데 별 달린 적만 자주 나오는 월드가 되는 거예요. '매우 쉬움'에는 그 키를 덮어쓸 값 자체가 없어서 생기는 일이에요.

해결 방법은 매번 빈 목록에서 시작하는 거예요. 아래 순서로 쓰면 몇 번을 재시작해도 결과가 같았어요.

./valheim_server.x86_64 -nographics -batchmode -name "Our world" -world "Dedicated" -password "<비밀번호>" \
  -resetmodifiers -preset hard -modifier deathpenalty casual -setkey nomap

-resetmodifiers를 맨 앞에, 그다음 사전 설정이나 개별 -modifier, 마지막에 -setkey를 둬요. -preset은 그 자체로 모두 지우기 때문에, 그보다 앞에 둔 설정은 사라져요.

사전 설정별로 실제로 쓰이는 값

새 월드에서 실측한 값이에요. 숫자는 게임 기본값 대비 퍼센트예요. 모든 사전 설정은 이와 별도로 preset <이름>이라는 기록용 항목도 남기는데, 아래에서 설명할 도전과제 판정은 이 항목을 무시해요.

사전 설정쓰이는 키
일반없음(모두 지움)
캐주얼playerdamage 125, enemydamage 50, enemyspeedsize 90, deathkeepequip, skillreductionrate 15, resourcerate 150, eventrate 0, passivemobs, teleportall, playerevents
쉬움playerdamage 110, enemydamage 75, enemyspeedsize 95, eventrate 150
어려움playerdamage 85, enemydamage 150, enemyspeedsize 110, enemyleveluprate 120, eventrate 60
하드코어playerdamage 70, enemydamage 200, enemyspeedsize 120, enemyleveluprate 140, eventrate 60, deathdeleteitems, deathskillsreset, nomap, nobossportals
몰입nomap, noportals, fire
망치 모드nobuildcost, passivemobs, eventrate 0

'캐주얼'은 전투 '매우 쉬움'에 사망 시 불이익 '캐주얼', 자원 증가, 습격 없음, 적 후공, 포탈 아이템 허용, 플레이어 기준 습격을 더한 구성이에요. '하드코어'는 전투 '매우 어려움'에 사망 시 불이익 '하드코어', 지도 없음, 보스가 살아 있는 동안 포탈 사용 불가를 더한 구성이에요.

단계별로 실제로 쓰이는 값

전투 — playerdamage는 내가 주는 피해, enemydamage는 내가 받는 피해, enemyspeedsize는 적의 크기와 속도, enemyleveluprate는 별 달린 적이 나오는 빈도예요.

-modifier combatplayerdamageenemydamageenemyspeedsizeenemyleveluprate
veryeasy(매우 쉬움)1255090—
easy(쉬움)1107595—
normal(일반)————
hard(어려움)85150110120
veryhard(매우 어려움)70200120140

사망 시 불이익(흔히 말하는 사망 패널티) — skillreductionrate는 죽었을 때 잃는 기술의 양을 조절해요.

-modifier deathpenalty키죽었을 때
casual(캐주얼)deathkeepequip, skillreductionrate 15장착한 장비는 그대로, 나머지는 떨어뜨려요. 기술은 조금만 잃어요
veryeasy(매우 쉬움)skillreductionrate 15전부 그 자리에 떨어뜨려요. 기술은 조금만 잃어요
easy(쉬움)skillreductionrate 50전부 떨어뜨려요. 기술은 평소의 절반만 잃어요
normal(일반)없음전부 떨어뜨리고, 다시 주우러 갈 수 있어요
hard(어려움)deathdeleteunequipped, skillreductionrate 150장착한 장비는 떨어뜨리고, 나머지 인벤토리는 삭제돼요. 기술도 더 많이 잃어요
hardcore(하드코어)deathdeleteitems, deathskillsreset가지고 있던 모든 아이템이 삭제되고 기술이 전부 초기화돼요

자원 정도 — 키는 resourcerate 하나예요. muchless 50, less 75, more 150, muchmore 200, most 300.

습격 정도 — 키는 eventrate 하나인데, 방향이 반대예요. 습격 사이의 간격을 늘리는 값이라서 숫자가 클수록 습격이 줄어요. none 0(습격 없음), muchless 200, less 150, more 60, muchmore 30.

포탈 — casual은 teleportall(광석과 금속을 포함해 모든 아이템이 포탈을 통과), hard는 nobossportals(보스가 살아 있는 동안 포탈 사용 불가), veryhard는 noportals를 써요.

메뉴의 체크 박스 다섯 개에는 -modifier 형태가 없어요. -setkey로 설정해요. nobuildcost(건설 비용 없음), passivemobs(적 후공 여부), playerevents(플레이어 기준 습격), nomap(지도 없음), fire(불조심).

메뉴에 없는 설정

-setkey는 메뉴보다 더 많은 키를 받아요. 아래 키들은 게임의 세계 보정 화면에는 없지만, 게임 코드가 읽고 전용 서버에서도 적용돼요.

키효과
nocraftcost제작에 재료가 필요 없어요
noworkbench작업대 근처가 아니어도 건설할 수 있어요
allpiecesunlocked모든 건축물을 처음부터 쓸 수 있어요
allrecipesunlocked모든 제작법을 처음부터 쓸 수 있어요
dungeonbuild던전 같은 실내에도 건축물을 놓을 수 있어요
nobuildingfall비, 눈, 재, 용암이 건물을 손상시키지 않아요

deathkeepinventory, nopseudodrops, noheavysnow, allheavysnow, worldlevellockedtools도 게임이 읽는 키예요. 실제 효과는 아직 테스트하지 않았어요.

그리고 배율이에요. 모두 퍼센트로 넣고 기본값은 100이에요. 숫자는 키와 같은 인수 안에 넣어야 해요. -setkey "carryweightrate 200"이면 최대 무게가 두 배가 돼요.

키조절하는 것
skillgainrate기술이 오르는 속도
skillreductionrate죽었을 때 잃는 기술
staminarate모든 행동의 스태미나 소모(0이면 소모 없음)
movestaminarate달리기, 점프, 수영의 추가 스태미나 소모
staminaregenrate스태미나 회복 속도
eitrrate마법에 쓰는 에이트르 소모
durabilityrate무기, 도구, 방어구의 내구도 감소 속도
foodrate음식 효과가 사라지는 속도(높을수록 빨리 사라짐)
adrenalinerate아드레날린이 쌓이는 속도
carryweightrate최대 무게

전투 키도 같은 방식으로 아무 퍼센트나 넣을 수 있어요. 예를 들면 -setkey "playerdamage 150"이에요.

이 섹션의 설정은 모두 그 월드의 도전과제를 비활성화해요. 메뉴의 어떤 단계에도 없는 전투 값도 마찬가지예요. 자세한 내용은 아래에서 설명해요.

-setkey가 안 먹히는 것처럼 보이는 이유

숫자가 별도 인수로 들어갔어요. -setkey carryweightrate 200은 인수가 두 개예요. 서버는 숫자 없는 carryweightrate(즉 100%)를 저장하고, 200은 갈 곳 없는 인수로 취급해요. 키와 숫자는 반드시 인수 하나여야 하니 따옴표로 묶어 주세요. -setkey "carryweightrate 200". 실행 줄을 변수 하나에서 공백 기준으로 잘라 만드는 런처도 조심해야 해요. 일부 패널과 컨테이너 이미지가 이렇게 동작하는데, 따옴표로 묶은 한 쌍을 다시 둘로 쪼개 버려요.

오타도 그대로 받아들여요. -setkey는 이름을 확인하지 않아요. -setkey nobuildcosts라고 쓰면 적은 그대로 월드에 저장되고, 아무 효과도 없어요.

지우는 건 못 해요. 다음 실행에서 -setkey를 빼도 설정이 꺼지지 않아요. 키가 이미 월드에 저장돼 있기 때문이에요. -resetmodifiers로 시작하고 남길 것만 다시 적어 주세요.

파일을 너무 일찍 확인했어요. 새 키는 월드를 불러오는 순간 게임에 적용되지만, .fwl에는 다음 저장 때 기록돼요.

호스팅 서버라면 이 줄을 직접 만들 필요가 없어요

KeepWorlds에서는 세계 보정이 콘솔의 설정 화면이에요. 사전 설정을 고르거나 '맞춤 보정'을 골라 난이도 다섯 항목, 규칙, 배율을 하나씩 정하면 돼요. 콘솔이 위의 순서대로 인수를 쓰고, 매번 빈 목록에서 시작하고, 배율은 인수 하나로 넘겨요. 기본값은 세계 설정 그대로 사용이라서, 가져온 월드나 예전에 설정해 둔 월드는 원래의 세계 보정을 그대로 유지해요.

도전과제가 비활성화되는 조건

게임 메뉴에서 고를 수 있는 설정, 즉 사전 설정, 다섯 슬라이더의 각 단계, 다섯 개의 체크 박스만으로는 도전과제가 꺼지지 않아요. 그 밖의 설정은 꺼져요.

게임은 월드의 세계 보정 키를 하나하나 메뉴가 만들 수 있는 값과 비교해요. 그 범위 밖의 키가 하나라도 있으면 월드에 표시가 남고, 그 월드에서 플레이하는 사람은 모두 도전과제 화면에서 이 문구를 보게 돼요.

치트 세계 수정자를 사용하고 있어 해당 세계의 도전과제 진행이 영구적으로 비활성화되었습니다.

해당하는 건 「메뉴에 없는 설정」의 모든 키, 메뉴 단계가 쓰는 값(예: skillreductionrate 50)이 아닌 한 모든 배율 키(100으로 적어도 마찬가지예요), 그리고 어떤 단계도 쓰지 않는 전투 값(예: playerdamage 150)이에요. 전용 서버에서도 똑같이 적용돼요. 플레이어가 접속하면 서버가 월드의 키를 보내고, 플레이어 쪽 게임이 같은 판정을 해요. 1.0.16의 게임 코드에서 확인했고, 1.0.17에서도 바뀌지 않은 걸 확인했어요. 문구에는 '영구적으로'라고 돼 있어요. 판정은 월드의 현재 키를 읽기 때문에 -resetmodifiers로 키를 지우면 풀릴 가능성은 있지만, 게임 안에서 확인하지는 못했어요. 영구적이라고 생각하는 게 안전해요.

Iron Gate의 Valheim 1.0 FAQ는 메뉴의 세계 보정 중에도 일부 도전과제를 막는 것이 있다며 망치 모드를 예로 들고, 망치 모드를 '일시적인 치트'로 취급한다고 해요. 코드에서 그 처리를 찾지는 못했으니, 망치 모드는 도전과제를 막는다고 생각하세요.

난이도가 걸린 도전과제는 전투 설정만 보고 진행도를 계산해요. 사망 시 불이익, 자원, 습격, 포탈은 여기에 관여하지 않아요.

백업으로 되돌릴 수 없는 건 사망 시 불이익뿐이에요

발헤임의 캐릭터는 서버가 아니라 각 플레이어의 PC에 저장돼요. 서버 백업에 들어 있는 건 월드, 즉 건물, 상자, 지도, 세계 보정이에요. 누구의 인벤토리나 기술도 들어 있지 않아요.

그래서 사망 시 불이익 '어려움'과 '하드코어'는 서버 백업이 닿지 않는 곳에 작용해요. '어려움'에서는 죽은 플레이어가 장착하지 않은 인벤토리를 모두 잃어요. '하드코어'에서는 가진 것이 전부 삭제되고 기술이 모두 초기화돼요. 그 뒤에 월드를 되돌려도 월드만 예전 시점으로 돌아가고, 잃은 장비는 돌아오지 않아요.

이 둘은 다 같이 정할 일이에요. 첫 사망이 나온 다음이 아니라, 켜기 전에 모두에게 알려 주세요.

이미 있는 월드의 세계 보정 바꾸기

언제든 바꿀 수 있어요. 서버를 멈추고, 인수를 바꾸고, 다시 시작하면 돼요. 새 세계 보정은 월드를 불러올 때 적용되고, 그때부터 월드에 저장돼요. 이미 월드에서 놀던 플레이어의 캐릭터는 그대로이고, 새 전투, 배율, 규칙은 그 실행부터 적용돼요.

어차피 실행 줄에 인수를 남겨 둘 거라면 -resetmodifiers부터 시작하는 전체 목록을 남겨 두세요. 그러면 실행 줄이 곧 월드 설정의 정확한 기록이 되고, 한 단어를 바꾸면 설정 하나만 바뀌어요.

자주 묻는 질문

발헤임 전용 서버에서 난이도는 어떻게 바꾸나요?

서버 실행 명령에 실행 인수를 붙여요. 일곱 가지 사전 설정 중 하나는 -preset, 전투, 사망 시 불이익, 자원, 습격, 포탈은 -modifier <종류> <단계>, 체크 박스와 그 밖의 설정은 -setkey예요. 월드에 원래 뭐가 있었는지에 결과가 좌우되지 않도록 -resetmodifiers부터 시작하고, 서버를 재시작해요.

서버를 재시작하면 세계 보정이 초기화되나요?

아니요. 세계 보정은 월드 파일에 저장되고 월드와 함께 불러와지기 때문에, 인수 없이 재시작해도 유지돼요. 바꾸려면 새 인수를 넘겨야 하고, 지우려면 -resetmodifiers나 -preset normal을 써요.

-setkey에 넣은 숫자가 왜 무시되나요?

키와 숫자가 인수 두 개로 넘어갔기 때문이에요. -setkey "carryweightrate 200"처럼 따옴표로 묶어 하나로 넘겨 주세요. -setkey carryweightrate 200이라고 쓰면 서버는 숫자 없는 키를 저장하고, 이건 기본값 100%라는 뜻이에요.

세계 보정도 백업에 저장되나요?

네. 세계 보정은 월드 파일의 일부라서, 백업에는 그 시점의 세계 보정이 들어 있고 복원하면 함께 돌아와요. 플레이어 캐릭터는 서버 백업에 들어 있지 않아요. 가혹한 사망 시 불이익으로 잃은 것도 마찬가지예요.

맡겨 버리는 방법

위의 설정은 전부 순서, 따옴표, 철자를 정확히 맞춰야 하는 실행 인수예요. 게다가 월드는 마지막으로 받은 값을 말없이 계속 유지해요.

KeepWorlds의 발헤임 데디 서버 호스팅에서는 같은 설정이 설정 화면이에요. 사망 시 불이익 '어려움'이나 '하드코어'를 저장할 때는 플레이어들에게 미리 알렸는지 확인을 받고, 실험이 잘못돼도 백업과 복원으로 월드를 되돌릴 수 있어요.

콘솔의 세계 보정. 사전 설정을 고르거나 항목을 하나씩 정할 수 있어요

다른 언어로 보기

직접 운영하지 않아도 돼요

게임과 요금제만 고르면 전용 머신에 서버가 올라가요. 백업과 게임 업데이트, 기한 알림은 저희가 챙길게요.

요금제 보기