Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
PotalMap
Valheim Portal Mod - Map-click portal teleport with Public/Private/Guild access modes, color-coded minimap pins, and a scrollable portal list
CHANGELOG
Changelog / 변경 로그
2026-09-23 (v0.1.85)
KR
- 돌/애쉬랜드 포탈이 이제 지도 핀과 좌측 목록에도 표시됨(사용자 요청, 2026-09-15에 제외했던 걸 되돌림) — 핀 아이콘/이름표는 회색으로 구분 표시되고(다른 포탈 색은 그대로), 좌측 목록 맨 아래에 "---Stone Portal---" 전용 분류가 추가됨.
- 돌 포탈이 포탈맵 시스템에 포함되면서 사라질 뻔했던 "광석 등 모든 아이템 운반 가능" 특례를 새 규칙으로 재구현 — 들어간 포탈과 고른 목적지가 둘 다 돌 포탈일 때만 광석 이동이 허용되고, 하나라도 나무 포탈이면 기존과 동일하게 차단됨(신규 설정 "Allow ore between Stone Portals"로 끌 수 있음).
EN
- Stone/Ashlands portals are now shown as map pins and in the left-side list too (user request, reverting the 2026-09-15 exclusion) - their pin icon/name label are tinted gray to stand out (other portal colors are unchanged), and a dedicated "---Stone Portal---" section was added at the bottom of the left list.
- Reimplemented the "carries any item including ore" trait that would otherwise have been lost now that Stone Portals are part of the portal-map system - ore transport is allowed only when both the entered portal and the chosen destination are Stone Portals; if either one is a wood portal it's blocked as before (can be disabled via the new "Allow ore between Stone Portals" setting).
2026-09-15 (v0.1.84)
KR
- 돌/애쉬랜드 포탈로는 광석·금속을 운반할 수 없던 버그 수정(사용자 제보) — PotalMap의 지도클릭/좌측목록 텔레포트가 포탈 종류와 무관하게 항상 광석을 차단하고 있었음, 이제 돌/애쉬랜드 포탈은 PotalMap이 아예 관리(핀 표시, 모드 관리, 텔레포트 가로채기)하지 않고 바닐라 그대로(걸어 들어가면 즉시 텔레포트, 광석 운반 정상) 동작하도록 변경 — PotalMap의 편의 기능(지도/목록 텔레포트, 모드 순환)은 나무 포탈에만 적용됨.
EN
- Fixed ore/metal being unable to pass through stone/Ashlands portals (user report) - PotalMap's map-click/side-list teleport always blocked ore regardless of portal type; stone/Ashlands portals are now left entirely unmanaged by PotalMap (no pins, no mode control, no teleport interception) and behave exactly like vanilla (walk in for an instant teleport, ore included) - PotalMap's convenience features (map/list teleport, mode cycling) now apply to wood portals only.
2026-09-14 (v0.1.82)
KR
- 포탈 모드 순환(공개/개인/길드)의 게임패드 조작 방식 변경 — LB+상호작용키 조합이 실기기에서 완전히 무반응이던 문제(2026-09-13 v0.1.79에서 도입, 사용자 리포트로 확인)를 수정, 포탈을 바라본 상태에서 Y버튼만 누르면 바로 모드가 순환되도록 완전히 새 방식으로 대체.
- 포탈을 바라볼 때 뜨는 모드 순환 안내 문구가 게임패드 사용 중에도 항상 키보드(Shift+E) 기준으로만 표시되던 것을 게임패드일 땐 Y버튼으로 표시하도록 수정.
- 포탈로 이동하거나 포탈이 많이 모인 허브에 진입할 때 순간적으로 프레임이 급격히 떨어지던 문제 수정(사용자 리포트) — 포탈 핀을 갱신할 때마다 길드 멤버 목록과 전체 포탈 목록을 매번 새로 계산하던 것이 포탈이 한꺼번에 여러 개 로드될 때 비용이 곱연산으로 커지고 있었음, 프레임당 한 번만 계산하도록 수정.
- 포탈을 바라보며 Y버튼을 눌러도 모드는 안 바뀌고 인벤토리만 열리던 버그 수정(사용자 리포트) — 즐겨찾기 Y는 정상 작동했지만 포탈 순환용 Y는 인벤토리를 여는 바닐라 처리와 같은 프레임에서 충돌해 순서에 따라 무시되고 있었음, 인벤토리를 여는 바닐라 처리보다 항상 먼저 실행되도록 수정하고 포탈을 보는 동안은 Y를 포탈 전용으로 소비하도록 변경.
EN
- Changed how portal mode cycling (Public/Private/Guild) works with a gamepad - fixed the LB+interact combo being completely unresponsive on real hardware (introduced in 2026-09-13's v0.1.79, confirmed via user report), replaced with a new approach where simply pressing Y while looking at a portal cycles its mode.
- Fixed the portal mode-cycling hint text always showing the keyboard shortcut (Shift+E) even while using a gamepad - it now shows the Y button instead when a gamepad is active.
- Fixed a sudden severe FPS drop when teleporting through portals or entering a portal hub (user report) - refreshing a portal pin was recomputing the guild member list and the full portal list from scratch every single time, which multiplied badly when many portals loaded at once; this is now computed once per frame instead.
- Fixed pressing Y while looking at a portal opening the inventory instead of cycling its mode (user report) - the map's favorite-toggle Y worked fine, but the portal-cycling Y raced against the vanilla inventory-open handling in the same frame and lost depending on execution order; it now always runs before the vanilla inventory check and consumes Y exclusively for the portal action while looking at one.
2026-09-13 (v0.1.79)
KR
- 좌측 포탈 목록 패널을 게임패드로 탐색할 수 있도록 개선 — DPad/좌스틱 상하로 항목 이동, A버튼으로 텔레포트, Y버튼으로 즐겨찾기 토글(선택된 항목은 밝게 표시되고 화면 밖으로 벗어나면 자동 스크롤).
- 포탈 모드 순환(공개/개인/길드)을 게임패드로도 가능하게 개선 — 키보드 Shift+E 대신 LB(발헤임 기본 보조키)를 누른 채 상호작용키를 누르면 동일하게 작동.
- 위 게임패드 목록 조작과 충돌하던 바닐라 지도 게임패드 입력(A버튼 핀 이름짓기, DPad 상하 핀 아이콘 순환)을 포탈 목적지 선택 화면이 떠 있는 동안 비활성화.
EN
- The left-side portal list panel can now be navigated with a gamepad - move the selection with the D-pad or left stick, teleport with A, and toggle favorite with Y (the selected row is highlighted and auto-scrolls into view).
- Portal mode cycling (Public/Private/Guild) now also works with a gamepad - hold LB (Valheim's built-in modifier button) while pressing interact, instead of the keyboard's Shift+E.
- Disabled the vanilla map gamepad inputs that conflicted with the new list controls (A button pin naming, D-pad pin icon cycling) while the portal destination screen is open.
2026-09-10 (v0.1.78)
KR
- 길드 모드 포탈이 맵 클릭/좌측 목록으로는 영원히 텔레포트/표시가 안 되던 버그 수정 — 소유자 정규화 ID가 옛 포탈에 백필되지 않은 경우에도 요청자가 실제 소유자면 접근을 허용하도록 개선(길드 탈퇴 시 접근권 상실 규칙은 그대로 유지).
- 위 버그의 근본 원인 보완 — 길드 포탈 소유자가 Shift+E로 직접 상호작용하지 않고 그 포탈 근처를 지나가기만 해도(씬 로드 시점) 낡은 정규화 소유자 ID가 자동으로 백필되도록 자가치유 범위 확대.
- Guilds 모드가 꺼져있거나 설치 안 됐을 때 Public/Private 포탈까지 포함해 텔레포트·핀 표시·모드 순환이 전부 실패하던 심각한 버그 수정 — Guilds 접근 확인 로직이 예외를 안전하게 우회하도록 재구성, 이제 Guilds 없이도 본인이 만든 포탈이 정상적으로 보이고 이용 가능함.
- Guilds가 꺼져있을 때 이미 길드 모드로 설정해둔 포탈을 Shift+E로 다시 되돌릴 방법이 전혀 없던 버그 수정 — 그 포탈의 진짜 소유자 본인은 Guilds 없이도 열람·텔레포트·모드 변경이 전부 가능하도록 개선(다른 사람은 여전히 접근 불가, 길드원 확인 불가 시 안전 우선 유지).
- Private/Guild로 제한한 포탈이라도 근처의 아무나 포탈 이름(연결용 태그)을 바꿀 수 있었던 보안 문제 수정 — 바닐라 포탈 이름 변경 요청을 가로채서 실제로 관리 권한이 있는지(소유자 또는 길드 조건) 재검증하도록 강화.
EN
- Fixed Guild-mode portals being permanently unteleportable/invisible via map-click or the side list when the owner's normalized ID was never backfilled on old portals — access is now granted to the true owner even in that case (leaving the guild still revokes access, unchanged).
- Addressed the same bug's root cause further - the stale normalized owner ID on Guild portals now also self-heals just from the owner's client loading the portal into the scene (e.g. walking nearby), not only via direct Shift+E interaction.
- Fixed a serious bug where having the Guilds mod disabled or not installed broke teleporting, pin display, and mode cycling for ALL portals, including Public and Private ones - reworked the Guilds availability check to safely avoid the crash, so your own portals now work correctly without Guilds installed.
- Fixed being unable to ever change a portal back out of Guild mode via Shift+E once Guilds was disabled - the portal's true owner can now view, teleport to, and change the mode of their own portal without Guilds (other players are still correctly denied, since guild membership can't be verified in that state).
- Fixed a security issue where anyone standing near a Private or Guild-restricted portal could rename it (the vanilla connection tag), regardless of permission - the vanilla rename request is now intercepted and re-verified against actual management permission (owner or guild).
2026-09-09 (v0.1.68)
KR
- 발헤임 Deep North(1.0) 업데이트에 맞춰 모드 호환성 갱신 - 포탈 등록/전체목록 조회, 텔레포트 가능 여부 판정, 지도 클릭 좌표, 우클릭 핀 삭제 관련 게임 내부 API가 이번 업데이트로 변경되어 대응.
EN
- Updated mod compatibility for the Valheim Deep North (1.0) update - adapted to internal game API changes around portal registration/listing, teleport eligibility checks, map click coordinates, and right-click pin removal.
2026-08-29 (v0.1.67)
KR
- 프로젝트를 PotalMap에서 PortalMap으로 리네임(오타 수정) — 폴더명, 네임스페이스, 클래스명, BepInEx 플러그인 GUID(com.korcaptain.potalmap → com.korcaptain.portalmap), RPC 이름, 배포 경로(korCaptain-PortalMap), Thunderstore 패키지명을 전부 변경. 단, 월드 세이브에 저장되는 ZDO 데이터 키(PortalMode/OwnerCharId/OwnerName/OwnerIdNormalized/Tags)는 기존 포탈과의 하위호환을 위해 "PotalMap ..." 값 그대로 유지.
- 미니맵 포탈 핀에 커스텀 이미지 대신 바닐라 기본 아이콘만 뜨던 문제 수정 — potal 에셋번들이 CaptainSkillTree 쪽 최신본보다 오래된 버전이라 이미지를 못 찾고 있었음(최신 번들로 교체), 그리고 "potal" 텍스처가 Sprite가 아닌 Texture2D로 임포트되어 있어 이름 기반 조회가 항상 실패하던 것도 함께 수정.
- Thunderstore에 이미 오타("potalmap") 상태로 배포된 이력이 확인되어, 위 리네임 중 배포/패키지 관련 명명을 다시 potalmap 계열로 되돌림 — 빌드 산출물 DLL명(potalmap.dll), 로컬 배포 경로(korCaptain-PotalMap), BepInEx 플러그인 GUID(com.korcaptain.potalmap), ModName(PotalMap), Thunderstore manifest 패키지명(PotalMap), 배포 zip 이름. 기존 potalmap 설치자의 config 연속성 보장이 목적. 네임스페이스/클래스명/RPC 이름/ZDO 데이터 키는 이번에 변경하지 않음.
- CaptainSkillTree와 동시에 실행할 때 "AssetBundle 'Memory' can't be loaded because another AssetBundle with the same files is already loaded" 에러가 뜨면서 포탈 핀이 바닐라 기본 아이콘으로 대체되던 문제 수정 — 두 모드가 완전히 동일한 바이트의 potal 에셋번들을 각자 embed하고 있어 CaptainSkillTree가 먼저 로드/상주시키면 PortalMap의 재로드가 항상 충돌해 실패했음. 이제 자체 번들을 새로 로드하기 전에 이미 로드되어 있는 동일 에셋번들이 있는지 먼저 확인해서 재사용(그 번들은 Unload하지 않음), 없으면 기존처럼 직접 로드.
EN
- Renamed the entire project from PotalMap to PortalMap (typo fix) — folder name, namespace, class names, BepInEx plugin GUID (com.korcaptain.potalmap → com.korcaptain.portalmap), RPC names, deploy path (korCaptain-PortalMap), and Thunderstore package name all updated. The ZDO data keys saved in world files (PortalMode/OwnerCharId/OwnerName/OwnerIdNormalized/Tags) were deliberately left as "PotalMap ..." to stay compatible with already-placed portals.
- Fixed the minimap portal pin showing only the vanilla default icon instead of the custom one - the embedded "potal" asset bundle was an outdated copy compared to CaptainSkillTree's (replaced with the current one), and the lookup also failed to find "potal" by name since it's imported as a Texture2D rather than a Sprite (now handled).
- Discovered the package was already live on Thunderstore under the typo'd name "potalmap", so reverted the distribution-facing naming from the rename above back to potalmap: build output DLL name (potalmap.dll), local deploy path (korCaptain-PotalMap), BepInEx plugin GUID (com.korcaptain.potalmap), ModName (PotalMap), Thunderstore manifest package name (PotalMap), and the release zip name. This preserves config continuity for existing potalmap installs. Namespace, class names, RPC names, and ZDO data keys were left unchanged this time.
- Fixed the portal pin silently falling back to the vanilla default icon while logging "AssetBundle 'Memory' can't be loaded because another AssetBundle with the same files is already loaded" whenever CaptainSkillTree was also running - both mods embed a byte-identical "potal" asset bundle, so once CaptainSkillTree loaded (and kept) its copy, PortalMap's own reload always collided and failed. It now checks whether an already-loaded bundle already has the "potal" asset before loading its own copy, and reuses that instance instead (without unloading it); otherwise it loads its own copy exactly as before.
2026-08-16 (v0.1.64)
KR
- 이미 소유자로 확정된 포탈이라도 정규화된 소유자 ID(OwnerIdNormalized)가 낡은 상태로 남아있던 버그 수정 — 길드 포탈이 목록/미니맵에서 영구히 사라지거나 Shift+E로 길드 모드 전환 후 포탈이 안 보이던 문제의 원인.
EN
- Fixed a bug where a portal's normalized owner ID (OwnerIdNormalized) could stay stale even when the owner was already correctly recorded — this caused Guild portals to permanently vanish from the list/minimap, or to disappear after switching to Guild mode via Shift+E.
2026-08-12 (v0.1.63)
KR
- 서버 재부팅 후 포탈 즐겨찾기가 사라지던 버그 수정 — 저장 키를 ZDOID에서 포탈 좌표 기반으로 교체.
- 다른 유저가 만든 Public 포탈이 맵에 안 보이던 문제 완화 — 서버가 5초마다 알고 있는 모든 포탈을 전원에게 재전송하는 self-healing 루프 추가.
- 포탈 관리(Shift+E) 권한을 이용 권한과 완전히 동일한 기준으로 통일 — Public은 누구나, Private은 소유자만, Guild는 현재 같은 길드원만(원 제작자라도 길드 탈퇴 시 관리 권한 상실).
EN
- Fixed favorited portals disappearing after a server restart — switched the storage key from ZDOID to portal coordinates.
- Mitigated Public portals made by other players not showing on the map — added a self-healing loop where the server re-broadcasts every known portal to all peers every 5 seconds.
- Unified portal management (Shift+E) permissions with access permissions — anyone for Public, owner only for Private, current guild members only for Guild (even the original builder loses management rights after leaving the guild).
[0.1.58] - 2026-08-11
[0.1.57] - 2026-08-11
[0.1.56] - 2026-08-11
[0.1.55] - 2026-08-11
[0.1.54] - 2026-08-11
[0.1.53] - 2026-08-11
[0.1.52] - 2026-08-11
[0.1.51] - 2026-08-11
[0.1.50] - 2026-08-11
[0.1.49] - 2026-08-10
[0.1.48] - 2026-08-10
[0.1.47] - 2026-08-10
[0.1.45] - 2026-08-10
[0.1.43] - 2026-08-10
[0.1.42] - 2026-08-10
[0.1.41] - 2026-08-10
[0.1.40] - 2026-08-10
[0.1.39] - 2026-08-10
[0.1.38] - 2026-08-10
[0.1.37] - 2026-08-10
[0.1.36] - 2026-08-10
[0.1.35] - 2026-08-10
[0.1.34] - 2026-08-10
[0.1.33] - 2026-08-10
[0.1.32] - 2026-08-10
[0.1.31] - 2026-08-10
[0.1.30] - 2026-08-10
[0.1.29] - 2026-08-10
[0.1.28] - 2026-08-10
[0.1.27] - 2026-08-10
[0.1.26] - 2026-08-10
[0.1.25] - 2026-08-10
[0.1.24] - 2026-08-07
[0.1.23] - 2026-08-07
[0.1.22] - 2026-08-06
[0.1.21] - 2026-08-06
[0.1.20] - 2026-08-06
[0.1.19] - 2026-08-06
[0.1.18] - 2026-08-06
[0.1.17] - 2026-08-06
[0.1.16] - 2026-08-06
[0.1.15] - 2026-08-06
[0.1.14] - 2026-08-06
[0.1.13] - 2026-08-05
- ✅fix1 : 포탈 연료 소모 기능의 기본값을 켜짐→꺼짐으로 변경(사용자 요청 — 기본 설정은 그레이드워프 눈을 쓰지 않음, 서버가 원하면 config에서 직접 켜야 함)
[0.1.12] - 2026-08-05
- ✅fix1 : 연료 아이템 기본값을
DvergrEye(추측값)에서GreydwarfEye(사용자 확인)로 정정
[0.1.11] - 2026-08-05
- ✅new1 : 포탈 이용 연료 소모 기능 추가 — 프리팹 이름으로 지정한 아이템을 인벤토리에서 소모(기본: GreydwarfEye 1개, 온오프/아이템/수량 전부 config)
- ✅new2 : 모든 부가 기능(화이트리스트, 포탈 브라우저 패널, 파티소환)에 온오프 config 토글 추가
- ✅new3 : 기존 Captain_TargetPortal 참고 — "Allow non public portals"/"Limit to vanilla portals"/"Default portal mode" config 포팅
- ✅fix1 : 맵클릭 텔레포트 로직이
MapInteraction/PortalBrowserPanel두 곳에 중복돼있던 걸PortalTeleporter공용 헬퍼로 통합(연료 체크도 한 곳에서만) - 모든 신규 config는
ServerSync.ConfigSync로 동기화되며(핫키류만 예외), "Lock Configuration"이 켜져있으면 서버 관리자만 변경 가능
[0.1.10] - 2026-08-05
- ✅new1 : "멤버" = Group 모드로 재정의 — Valheim 파티 대신 PotalMap 자체 멤버 목록 기준으로 접근 판정
- ✅new2 : 멤버 목록을 포탈별이 아니라 전역 공유로 변경 — 한 포탈에서 등록하면 이 세션에서 알고 있는 모든 포탈에 즉시 전파(
MemberList캐시 +PortalTracking의 신규 포탈 캐치업 동기화) - ✅fix1 : Group 모드가 더 이상 Groups.API에 의존하지 않게 되어
SquashPortalMode의 Group 스킵 조건 제거 - ✅fix2 : 더 이상 쓰이지 않는
GroupSnapshot필드,PlayerIdentity.GetOnlineGroupMemberIds()제거
[0.1.09] - 2026-08-05
- ✅new1 : 화이트리스트에 이미 등록된 사람은 누구나 Shift+E로 멤버를 추가/삭제할 수 있게 변경(기존엔 소유자만 가능)
- ✅new2 :
PlayerIdentity.TryGetOnlinePlayerIdentity추가 — RPC의 sender 피어ID로 실제 온라인 캐릭터의 영속 PlayerID/이름을 조회(클라이언트가 조작 불가능한 값) - ✅fix1 :
ChangePortalMode/SetWhitelist/SetTags세 RPC 전부 클라이언트가 보내는 파라미터를 신뢰하던 소유권 체크를 진짜 서버 권위 검증(sender 기반)으로 교체 — 화이트리스트 편집 권한을 넓히면서 더 중요해진 부분 - ✅fix2 :
ChangePortalMode/SetTagsRPC에서 절대 안 바뀌는 소유자 정보를 매번 왕복시키던 불필요한 매개변수 제거
[0.1.08] - 2026-08-05
- ✅fix1 : nullable 참조 경고(CS8602) 제거
[0.1.07] - 2026-08-05
- ✅fix1 : Shift+E가 화이트리스트 창과 바닐라 포탈 이름짓기 입력창을 동시에 열던 문제 수정 (모드순환 키가 다른 기능이 예약한 E 메인키를 감지하면 바닐라 동작을 억제)
- ✅fix2 :
PortalModeRpc에WhitelistRpc/PortalTagsRpc와 동일한 소유권 일관성 체크 추가 - ✅new1 :
ServerSync.ConfigSync연동 — 파티소환 활성화/코스트/타임아웃은 서버 동기화, 각 기능 핫키는 개인 설정으로 유지, "Lock Configuration" 토글 추가