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.
Hard Item Randomizer
丝之歌物品随机+技能随机+开局选项MOD,统一种子控制
CHANGELOG
v1.6.3
- 敌人随机调整优化:大小缩放概率与血量异常修复
- 敌人大小随机现在只影响 20% 的替换敌人:80% 的敌人保持原大小不变,20% 的敌人会在 0.3 倍到 2.5 倍之间随机缩放(正弦分布,更倾向于极值),使体型变化更具惊喜感但不泛滥。
- 彻底修复关闭“启用敌人随机”后原敌人血量异常的问题:之前关闭开关后,原敌人血量会被错误地保留为 10000 点(EnemyRando 内部临时值)。现在开关关闭时会强制恢复原敌人血量、重新激活物体,并移除残留组件,确保敌人完全恢复原版状态。
- 开关功能现在完全可靠:开启时 EnemyRando 正常替换并进行血量修正与大小缩放;关闭时 EnemyRando 完全不生效,所有敌人回归原版。
- Enemy randomizer adjustments: size scaling probability & health regression fix
- Random size scaling now applies to only 20% of replaced enemies: 80% of enemies keep their original size, while 20% are randomly scaled between 0.3× and 2.5× (sine‑weighted, favouring extremes) – adding variety without over‑doing it.
- Fixed health bug when toggling “Enable Enemy Randomizer” OFF: previously, when disabled, the original enemy would keep an incorrect 10000 HP (internal temporary value from EnemyRando). The mod now forces the original HP back, reactivates the object, and removes leftover components, ensuring the enemy fully reverts to vanilla state.
- Toggle is now completely reliable: when ON, EnemyRando replaces enemies, applies HP correction and random size; when OFF, EnemyRando does nothing – all enemies remain unchanged.
- 新增面板背景开关
- 在开局选项面板左侧“当前存档开局设置:”标题旁添加了“面板背景”开关(与其它开关样式一致,显示开/关状态)。
- 开启时显示自定义背景图片(
nandu/4.png);关闭时显示半透明深灰色背景,可隐约看到后方游戏画面。 - 开关状态自动保存,下次启动游戏时保持上次设置。
- Added panel background toggle
- Added “Panel Background” toggle next to the “Current Save Startup Settings:” title on the left panel (same style as other toggles, showing on/off status).
- When enabled, displays the custom background image (
nandu/4.png); when disabled, shows a semi‑transparent dark grey background that lets the game view show through. - Toggle state is automatically saved and restored on next game launch.
v1.6.1
- 增加怪物随机调整功能(集成 SimpleEnemyRando)
- 在开局选项面板右侧新增“启用怪物随机”开关,控制对
SimpleEnemyRando模组生成怪物的额外修正。 - 血量修正:所有被替换的怪物,其生命值强制设为原怪物的血量(不再受
MaintainHp配置或黑线化倍率影响)。 - 大小随机:每个替换怪物生成时,体型会在 0.3 倍到 2.5 倍之间随机缩放(正弦分布,更倾向于极值),使怪物外观更具变化性,不影响碰撞判定和攻击范围。
- 以上调整仅在开关打开时生效,不影响
SimpleEnemyRando原有其他功能(黑线化、等离子化、一致性模式等)。
- Added monster randomizer adjustments (integrated with SimpleEnemyRando)
- Added “Enable Enemy Randomizer” toggle on the right panel of the startup options, controlling extra modifications to enemies spawned by
SimpleEnemyRando. - HP correction: All replaced enemies now have their health forced to the original enemy’s HP (ignoring
MaintainHpconfig and black‑threaded multipliers). - Random size: Each replaced enemy’s scale is randomly chosen between 0.3× and 2.5× (sine‑weighted distribution, favouring extreme values), adding visual variety without affecting collision or attack ranges.
- These adjustments only take effect when the toggle is enabled, leaving all other
SimpleEnemyRandofeatures (black‑thread, plasmified, consistency modes, etc.) untouched. ——————
v1.5.7
- 额外拾取点生成系统全面完成,并修复重生重复生成问题
- 今日为 69 个自定义位置添加了拾取点,覆盖场景包括:Tut_01、Bonetown、Bone_01c、Bone_01、Bone_04、Mosstown_01/02、Bone_14、Bone_19、Belltown_basement_03、Bone_08/09/10/11、Aspid_01、Bonegrave、Chapel_Wanderer、Shellwood_26、Belltown_04、Bone_East_03/07/08/09b/14/14b/16/17/17b/18/18b/24、Ant_04_left、Ant_21、Dock_06_Church、Greymoor_01/02/04/05/06/07/08/15/15b/22、Shellwood_11、Coral_12、Song_01/03/11/15/17、Hang_08、Library_04/06/07、Dock_02。
- 引入了独立坐标持久化机制:当玩家在任何位置拾取物品时(无论是原生点还是自定义点),模组会记录玩家当前位置的坐标。这些坐标会在后续场景加载时用于判断,若某自定义点的坐标与已记录坐标的距离在 2 单位以内,则该自定义点不会再次生成。
- 该机制确保了自定义拾取点在玩家捡起后永远不会重生,且不依赖
PlayerData的物品拥有状态,仅依赖实际拾取时的位置。 - 所有自定义点目前均给予物品
Simple Key(可后续批量调整)。
- Extra pickup generation system completed, and respawn issue fixed
- Added pickups to 69 custom positions across numerous scenes, including Tut_01, Bonetown, Bone_01c, Bone_01, Bone_04, Mosstown_01/02, Bone_14, Bone_19, Belltown_basement_03, Bone_08/09/10/11, Aspid_01, Bonegrave, Chapel_Wanderer, Shellwood_26, Belltown_04, Bone_East_03/07/08/09b/14/14b/16/17/17b/18/18b/24, Ant_04_left, Ant_21, Dock_06_Church, Greymoor_01/02/04/05/06/07/08/15/15b/22, Shellwood_11, Coral_12, Song_01/03/11/15/17, Hang_08, Library_04/06/07, Dock_02.
- Introduced a position‑based persistence system: whenever the player picks up any item (from any source), the mod records the player’s current position. When loading a scene, any custom pickup whose coordinates are within 2 units of a recorded position will be skipped.
- This ensures that custom pickups never respawn after being collected, without relying on
PlayerData’s ownership flags – only the actual pick‑up position matters. - Currently all custom pickups grant
Simple Key(can be batch‑changed later).
- 少量场景尚未完全覆盖,货币随机物品机制待后续调整
- 极少数场景(如部分 Greymoor 房间、Coral 区域深处等)的自定义点尚未放置,将在后续版本中补全。
- 货币掉落随机转换为物品的机制(
CurrencyCollectPatch)暂时保持原样,待全部额外拾取点完成后,再统一评估并可能调整保底逻辑。
- A few scenes still lack custom pickups, currency‑to‑item randomizer will be revisited later
- A handful of scenes (e.g., some Greymoor interiors, deeper Coral rooms) have not yet received custom pickups; they will be covered in future updates.
- The “currency → random item” mechanic remains untouched for now; it will be reviewed and possibly adjusted after all extra pickup placements are completed.
- 货币保底与拾取点奖励改为混合池(物品/技能/纹章等概率抽取)
- 货币掉落保底(每约150次掉落)和拾取点替换现在从混合池中随机抽取奖励,不再固定给予物品。
- 奖励类型及概率:物品 70%、技能 20%、纹章 10%。
- 物品奖励沿用原有的
ItemRandomizer.GetRandomItem()池,包含所有非黑名单、可继续获得的SavedItem(工具、收集品、圣物等)。 - 技能奖励直接调用
SkillTriggerMod.SkillRandomizer.GiveRandomSkill(),技能获得时会显示专属弹窗(图标+名称)。 - 纹章奖励通过
crest.Unlock()触发CrestRandomizePatch的映射系统,自动解锁对应的随机纹章,并禁用源纹章神龛。 - 钥匙保底(前30次掉落)保持不变,仍然固定给予
Simple Key,不参与混合池。
- Currency pity and pickup replacement now use a mixed reward pool (item/skill/crest)
- Currency drop pity (roughly every 150 drops) and pickup replacement now draw from a mixed reward pool instead of always giving an item.
- Reward types and probabilities: Item 70%, Skill 20%, Crest 10%.
- Item rewards use the existing
ItemRandomizer.GetRandomItem()pool, containing all non‑blacklisted, still‑obtainableSavedItem(tools, collectables, relics, etc.). - Skill rewards directly call
SkillTriggerMod.SkillRandomizer.GiveRandomSkill(), which shows a dedicated popup (icon + name) when a skill is obtained. - Crest rewards call
crest.Unlock(), triggering the mapping system inCrestRandomizePatch, which unlocks a random mapped crest and disables the source shrine. - The key pity (first 30 drops) remains unchanged, always giving a
Simple Keyand not participating in the mixed pool.
v1.5.6
- 拾取点完全脱离游戏原生管理,消失仅取决于实际拾取
- 无论原物品在
PlayerData中是否已被标记为“已拥有”,拾取点都会强制显示,除非玩家亲手捡起。 - 彻底拦截了
CheckActivation和SetPlayerDataBool两个原生隐藏判断,游戏再也无法根据物品获得状态自动隐藏拾取点。 - 所有拾取点(包括原生的、自定义添加的)现在由模组根据
_pickedKeys统一控制显示/隐藏,真正做到了“未捡必现,已捡永消”。
- Pickups completely decoupled from game’s ownership system; disappearance only depends on actual collection
- Pickups are forced to appear regardless of whether the original item is already marked as “owned” in
PlayerData, unless the player actually picks them up. - The native hiding methods
CheckActivationandSetPlayerDataBoolare fully blocked by Harmony prefixes, preventing the game from auto‑hiding pickups based on ownership. - All pickups (both vanilla and custom‑added) are now uniformly controlled by the mod via
_pickedKeys, achieving “unpicked = visible, picked = gone”.
- 初步完成额外拾取点放置(非拾取点念珠、宝箱等)
- 为大量原本不可交互或仅作为装饰的物体(如念珠、宝箱、雕像等)增加了拾取点。
- 目前已覆盖的场景区域:骸底镇(Bonetown)、深坞(Deep Docks)、猎者小径(Hunter’s Nest / 部分相关房间)。
- 货币随机获得物品的机制暂时保留不动,等待全部拾取点放置完毕后再统一调整。
- Initial placement of extra pickups on non‑pickup objects (rosaries, chests, etc.)
- Added pickups to many previously non‑interactive or decorative objects (e.g., rosaries, chests, statues).
- Currently completed areas: Bonetown, Deep Docks, and Hunter’s Nest (plus several related rooms).
- The “currency → random item” mechanic is temporarily left untouched; it will be revisited after all extra pickup placements are finished.
- 开局面板位置修正与交互优化
- 面板初始位置改为 底部对齐(
y = Screen.height - 1200),不再因屏幕高度变化而抖动或超出视野。 - 彻底修复了面板背景抽搐问题(背景不再随内部布局变化而闪烁)。
- “分类随机”模式下的四个滑块(垂直/水平/特殊/攻击技能)现在放入固定高度的滚动区域,可通过滚动条查看所有选项,面板总高度不再被撑开,底部按钮始终可点。
- Startup panel position fixed and interaction improved
- Panel now anchors to the bottom of the screen (
y = Screen.height - 1200), preventing jitter or going off‑screen. - The background flickering issue has been fully resolved (background no longer rebuilds on layout changes).
- Under “Category Random” mode, the four sliders are placed inside a scrollable area with a fixed height, allowing all options to be accessed via scrollbar. The overall panel height stays constant, and the bottom buttons remain always clickable.
v1.5.4
- 拾取点随机管理系统彻底修复
- 重写了拾取点的控制逻辑,现在完全由模组自主管理每个拾取点的消失与出现状态。
- 禁用游戏原生的
PersistentBoolItem组件,改用唯一键(优先读取itemData.ID,降级使用场景+坐标)持久化记录已捡点。 - 场景加载时强制应用状态,确保拾取点不会因为游戏内部初始化而被错误还原。
- 重置种子世界时,所有拾取点会重新出现,已捡记录同步清空。
- Pickup point randomisation management fully fixed
- Overhauled the pickup control logic; the mod now fully manages the visibility state of every pickup.
- Disabled the game’s native
PersistentBoolItemcomponent and switched to a unique‑key system (preferringitemData.ID, falling back to scene+position) for persistent tracking of collected pickups. - Force‑applies the collected state on scene load, preventing pickups from being incorrectly restored due to game‑side initialisation.
- Resetting the seed world now respawns all pickups and clears the collected record.
- 陷阱随机池新增三名特殊敌人
- 在“装饰物”分类中加入三个新单位:
- 核弹手雷王(
dock_bomber) – 飞行投掷大范围爆炸物。 - 越战老兵 ×2(
stilkin和stilkin_trapper) – 一个近战突袭,一个远程投掷飞镖。
- 核弹手雷王(
- 它们会按照陷阱生成规则出现在场景中,拥有完整的 AI 行为,不影响原有陷阱配额。
- 对应的预制体已通过
JumpObjects.architect.json预加载,确保动态生成正常。
- Three new enemies added to trap randomiser
- Added three new units to the “Decoration” category:
- Nuke Grenade King (
dock_bomber) – flying enemy that drops large‑scale explosives. - Two Vietnam War Veterans (
stilkinandstilkin_trapper) – one melee ambusher, one ranged dart thrower. - They spawn according to the trap generation rules, have full AI behaviour, and do not interfere with the original trap quotas.
- Nuke Grenade King (
- Their prefabs are preloaded via
JumpObjects.architect.jsonto ensure dynamic spawning works correctly.
- 开局选项面板垂直位置调整
- 将设置面板的初始位置改为 底部对齐(
y = Screen.height - 1200),底部紧贴屏幕下沿。 - 避免面板过高时超出屏幕顶部,为下方内容留出更多空间。
- Startup panel position adjusted
- The settings panel now aligns to the bottom of the screen (
y = Screen.height - 1200), keeping the bottom edge flush with the screen. - Prevents the panel from extending above the screen when it is too tall, leaving more room for lower content.
- 房间随机逻辑初步完成,99% 不会卡关
- 优化了随机连接生成算法,通过以下手段极大降低死路概率:
- 排除有效出口数为 1 的房间(不参与随机,保持原版连通性)。
- 禁止自环,禁止
Tut_01连接到高房间。 - 高房间后置处理(第二阶段),先连接普通房间,剩余出口再与高房间混合配对。
- 添加生成后完整性验证,自动重试不合规的结果。
- 经大量测试,99% 以上的情况下所有房间都能通过某种路径到达,极少数边缘情况会通过验证重试自动修复。
- Room randomisation logic preliminarily completed, 99% no soft‑locks
- Improved the connection generation algorithm to greatly reduce dead ends:
- Rooms with only one valid exit are excluded (stay vanilla).
- Self‑loops and
Tut_01connecting to high‑priority rooms are forbidden. - High‑priority rooms are processed in a second phase: normal rooms connected first, then remaining exits mixed with high rooms.
- Added post‑generation validation and automatic retry for invalid results.
- Extensive testing shows that over 99% of runs allow all rooms to be reachable; rare edge cases are automatically fixed by retries.
- 椅子模组(Benchwarp)翻译全面修正
- 修正了所有凳子的中文译名(区域名和具体凳子名),与游戏内场景名称保持一致。
- 右侧面板的难度按钮文字、各种开关标签也同步更新为中/英文准确对照。
- 中英文切换时不再出现混合或错译。
- Benchwarp translations fully corrected
- Fixed all Chinese bench names (area names and individual bench names) to match in‑game scene names.
- Also updated difficulty button labels and toggle texts on the right panel for accurate Chinese/English switching.
- No more mixed or incorrect translations when toggling languages.
v1.5.2
- 纹章随机系统全面修复
- 重新实现了纹章(Crest)的随机映射与重生装备逻辑。
- 现在获得神龛纹章时,会正确映射到另一个随机纹章并解锁,源纹章保持锁定状态。
- 坐长椅重生后,角色会自动装备最后获得的那个映射纹章,外观和属性都能正常刷新。
- 整体效果与 v1.4 及更早版本基本一致,但 角色模型上的纹章动画没有变化(即装备不同纹章时,环绕主角的粒子/特效样式保持原样,不影响游戏性)。
- 修复了之前版本中重生无法刷新纹章外观、Hunter 被错误映射、协程启动失败等问题。
- 所有防链式映射、教堂场景禁用、持久化记录等辅助功能全部保留。
- Crest randomizer fully fixed
- Completely reworked the crest mapping and respawn equip logic.
- Obtaining a shrine crest now correctly maps it to another random crest, unlocks the target, and leaves the source crest locked.
- After respawning at a bench, the hero automatically equips the last mapped crest, with both visuals and stats properly refreshed.
- The overall behaviour is nearly identical to v1.4 and earlier, except that the crest animation on the character model does not change (i.e., the particle/effect circling the hero stays the same regardless of equipped crest – gameplay unaffected).
- Fixed previous issues where the crest appearance wouldn’t update on respawn, Hunter was incorrectly remapped, coroutine failures, etc.
- All supporting features (chain‑mapping prevention, chapel disabling, persistent storage) remain intact.
v1.5.1
- 场景音乐无缝切换(房间随机模式专用)
- 当房间随机化开启时,在不同区域之间移动,背景音乐会直接切换,不再有淡入淡出的过渡效果。
- 这能避免音乐错位感,比如明明已经进入灰沼,却还在播放钟心镇的配乐。
- 该功能默认开启,无需任何设置,只在房间随机化激活时生效。
- Instant music switching for room randomizer
- When room randomization is active, background music now cuts directly when moving between areas, removing the fade‑in/fade‑out transition.
- This prevents music mismatch, such as hearing Bellhart’s theme while actually inside Greymoor.
- The feature is enabled by default and only takes effect when the room randomizer is turned on.
- 完成度百分比显示开关(全局生效)
- 在开局选项面板中新增“完成度”按钮,可以自由选择是否在背包界面和存档界面显示完成度百分比。
- 关闭后,背包、工具、日志、任务等界面将不再显示“完成度”文字和百分比数字,存档界面也不会显示完成度。
- 该开关独立保存,切换后立即生效,无需重进游戏。
- 注意:关闭显示并不会影响游戏内部的完成度计算,只是隐藏了文字,进度不受影响。
- Completion percentage display toggle (global)
- A new “Completion” button has been added to the startup options panel, allowing you to choose whether to show the completion percentage in the inventory and save menus.
- When turned off, the “Completion” label and percentage number disappear from the inventory, tools, journal, quests, and save file screens.
- The toggle state is saved independently and takes effect immediately without restarting the game.
- Note: Hiding the display does not affect the internal completion calculation; your progress remains untouched.
- Skip 房间名单(预备数据,尚未生效)
- 根据游戏体验,我们整理了一批“skip”房间的门名单。
- 这些房间的门在随机连接时可能被标记为特殊规则(例如需要特定能力才能通过的出口)。
- 目前仅完成数据统计和存储,尚未将其加入房间随机化的连接规则中。
- 后续版本将根据这份名单,对随机连接进行精细调整,避免玩家卡关或强制走困难路线。
- Skip room list (data preparation, not yet active)
- Based on gameplay experience, we have compiled a list of “skip” room doors.
- These doors may be subject to special rules during random connection (e.g., exits that require specific abilities to traverse).
- Currently, only the data has been collected and stored; it has not been integrated into the room randomizer’s connection rules.
- Future updates will use this list to fine‑tune random connections, preventing soft‑locks or forced difficult routes.
- 所有凳子名称翻译全面修正
- 修正了 Benchwarp(放椅子模组)中所有凳子的中文译名。
- 包括区域名称(如“甲木林”“罪石牢狱”等)和具体凳子名称(如“颓败教堂”“寄生纹章”“阿特拉织巢”等)。
- 同时修正了右侧面板中难度按钮的翻译(“初猎”“专注”“满溢”)以及各种开关的文字。
- 现在中英文切换时,所有界面文字都能准确对应,不再出现英文混入中文或翻译错误的情况。
- All bench names translations fully corrected
- Fixed the Chinese translations for all benches in the Benchwarp mod.
- This includes area names (e.g., “甲木林”, “罪石牢狱”) and individual bench names (e.g., “颓败教堂”, “寄生纹章”, “阿特拉织巢”).
- Also corrected translations for difficulty buttons (“初猎”, “专注”, “满溢”) and various toggle labels.
- When switching between Chinese and English, all interface text now matches accurately, with no mixed or incorrect translations.
v1.5.0
- 拾取点管理绑定物品随机开关,纹章诅咒开局自动重置
- 拾取点消失/出现状态现在完全跟随物品随机开关:开启时模组接管所有拾取点控制,关闭时恢复原生组件行为,不再残留已捡记录。
- 纹章诅咒系统在游戏开局时强制保存原始英雄属性并重置为1倍,确保无诅咒残留。开关状态独立,默认关闭,不再随物品随机开关自动启用。
- Pickup management now bound to item randomizer toggle; crest curse resets on game start
- Pickup visibility state follows the item randomizer toggle: when enabled, the mod fully controls all pickups; when disabled, native components are restored and no leftover collected records remain.
- The crest curse system now forces a reset of hero attributes to their original (1x) values at game start, ensuring no leftover curse effects. Its toggle is independent and disabled by default, no longer auto‑enabled with the item randomizer.
- 商店 UI 彻底修复:已购买槽位偏移 + 重排逻辑
- 修复商店列表中已购买槽位不占位导致后续槽位上移的问题。现在无论是否购买,每个槽位都参与位置累加,已购买槽位额外增加 1.5 偏移量,正确占据空间。
- 未购买槽位紧凑排列,滚动区域高度自适应可见槽位数量,背景空洞问题完全解决。
- Shop UI completely fixed: purchased slot offset + layout logic
- Fixed the issue where purchased slots did not occupy space, causing subsequent slots to shift upward. Now every slot participates in position accumulation regardless of purchase status, with purchased slots receiving an extra 1.5 offset to correctly occupy space.
- Unpurchased slots are compactly arranged, and the scrollable area height adapts to the number of visible slots, eliminating any background gaps.
- 纹章诅咒效果调整:削弱幅度降低,正面属性增至 3 个
- 每个纹章现在随机选择 3 个属性 获得正面增益(原为 2 个),增益倍率保持不变。
- 负面削弱范围大幅缓和:冷却类从 2~5 倍降至 1.2~2 倍,速度/下落类从 0.3~0.6 提升至 0.7~0.9。
- 开关关闭时立即恢复所有原始属性,无需二次操作。
- Crest curse effect rebalanced: reduced penalty, increased positive attributes to 3
- Each crest now randomly selects 3 attributes for positive bonuses (previously 2), keeping the same positive multipliers.
- Negative penalty ranges have been significantly softened: cooldown categories from 2–5x down to 1.2–2x, speed/fall categories from 0.3–0.6 up to 0.7–0.9.
- Turning off the toggle instantly restores all original hero attributes with no extra steps required.
- 其他改进与清理
- 商店随机器中排除了
ToolCrest和无图标的物品,避免黑屏报错。 - 移除了热键处理器中 F5 输出 FSM 调试信息的功能,减少控制台噪音。
- 所有改动均已测试通过,商店购买、重排、纹章诅咒开关、拾取点管理均稳定运行。
- Other improvements and cleanup
- The shop randomizer now excludes
ToolCrestand items without popup icons to prevent black screen errors. - Removed the F5 debug function that dumped FSM info from the hotkey handler, reducing console noise.
- All changes have been tested and verified: shop purchase, layout, crest curse toggle, and pickup management all work stably.
v1.4.7
-
拾取点完全自主管理(核心重写)
- 禁用游戏原生组件:在
PickupPatch.Initialize中遍历所有CollectableItemPickup,将其挂载的PersistentBoolItem组件设为enabled = false,彻底切断游戏对拾取点消失/出现的控制。 - 唯一键生成:使用
GetPickupKey方法,优先通过反射读取PersistentBoolItem.itemData.ID(若存在)作为稳定标识;否则降级使用场景名 + 物体坐标(保留两位小数),确保每个拾取点有全局唯一的键。 - 持久化记录:已捡点的唯一键存入
HashSet<string>,序列化为picked_keys.json保存到BepInEx/config/SilksongItemRandomizer/。写入采用脏标记(_isDirty)避免频繁 IO。 - 场景加载强制应用状态:
ApplyStateToScene遍历当前场景所有拾取点,根据_pickedKeys决定SetActive(!isPicked)。同时在OnSceneLoaded中调用延迟版本ApplyStateToSceneWithDelay,等待 0.2 秒后再次强制执行,防止游戏内部初始化覆盖。 - 拾取时立即标记:在
DoPickupAction的补丁中,无论特殊点还是普通点,处理完随机物品后都调用MarkAsPicked:将键加入_pickedKeys,保存文件,并立即SetActive(false)禁用物体。 - 重置功能:
ResetAll删除picked_keys.json,清空内存中的_pickedKeys,然后调用WarpToLastBench(保存游戏+加载存档)传送回上次坐的长椅,重新进入场景后所有拾取点重新出现。
- 禁用游戏原生组件:在
-
Item pickup point fully self‑managed (major rewrite)
- Disable native component: In
PickupPatch.Initialize, iterate allCollectableItemPickupand set theirPersistentBoolItemcomponent toenabled = false, completely removing the game’s control over pickup state. - Unique key generation:
GetPickupKeyfirst tries to readPersistentBoolItem.itemData.IDvia reflection; if not available, falls back to scene name + position (2 decimals), ensuring a globally unique key for each pickup. - Persistent record: Collected keys are stored in a
HashSet<string>and serialised topicked_keys.jsonunderBepInEx/config/SilksongItemRandomizer/. A dirty flag (_isDirty) prevents excessive file writes. - Force state on scene load:
ApplyStateToSceneloops through all pickups in the scene and callsSetActive(!isPicked)based on_pickedKeys. A delayed versionApplyStateToSceneWithDelayis called inOnSceneLoaded, reapplying the state after 0.2 seconds to override any late initialisation by the game. - Mark immediately on pickup: In the
DoPickupActionpatches (both Prefix and Postfix), after handling random items,MarkAsPickedis called: adds the key to_pickedKeys, saves the file, and instantly sets the pickup object inactive. - Reset function:
ResetAlldeletespicked_keys.json, clears the in‑memory set, and warps to the last bench (via save+load). Upon re‑entering the scene, all pickups reappear.
- Disable native component: In
-
物品随机化无缝适配
- 特殊点拦截(圣物
CollectableRelic、工具ToolItem、包含 “Rosary” 的念珠):在Prefix中替换为随机物品,原物品不获得,随后标记为已捡。 - 普通点:在
Postfix中正常获得原物品,并额外给予一个随机物品,随后标记为已捡。 - 所有随机化逻辑保留原有种子机制,黑名单物品(如
Steel Spines等)不参与随机替换。
- 特殊点拦截(圣物
-
Item randomiser fully compatible
- Special pickups (Relic, Tool, Rosary‑named): replaced in
Prefixwith a random item; the original item is not obtained, then marked as picked. - Normal pickups: in
Postfix, the original item is obtained normally, plus an extra random item is granted, then marked as picked. - All randomisation logic retains the seed mechanism; blacklisted items (e.g.,
Steel Spines) are excluded.
- Special pickups (Relic, Tool, Rosary‑named): replaced in
-
纹章诅咒系统
每个纹章独立生成偏科效果:随机选择两个英雄属性获得最大值(冷却时间缩短至 1/4,速度提升至 1.5 倍),其余属性极端削弱(冷却时间延长至 2~5 倍,速度降低至 0.3~0.6 倍)。
场景加载时自动应用当前装备的纹章效果,更换纹章后立即生效(无需坐椅子)。
在开局面板“技能随机模式”下方添加独立开关按钮,支持中英文双语显示,开关状态随种子保存并在重置时清除缓存。 -
Crest curse system
Each crest independently generates a specialised effect: two random hero attributes are maxed (cooldown reduced to 1/4, speed increased to 1.5×), while all other attributes are heavily reduced (cooldown 2–5× longer, speed 0.3–0.6×).
The effect is applied automatically on scene load and updates instantly when a crest is equipped (no bench required).
A dedicated toggle button is added below the “Skill Random Mode” section in the startup panel, with bilingual support; the toggle state is saved with the seed and cleared on reset.
v1.4.6
-
修复物品随机获得攻击方向后,切换场景左劈/右劈设置丢失的问题
现在拾取物品时随机解锁的上劈、左劈、右劈会立刻保存到存档和配置文件中,不会再因为进出房间或坐椅子而失效。 -
Fixed attack direction settings (left/right slash) not persisting after scene transition when unlocked via item pickup
Unlocked directions are now saved immediately to both PlayerData and configuration file, preventing loss when changing rooms or using benches. -
为椅子模组(Benchwarp)添加脱离卡死的快捷键
在游戏中按下 F6 即可直接传送回上一次坐过的椅子,不需要打开菜单,不需要打开任何界面。
即使在战斗中卡住、掉进地形缝隙或被陷阱无限连击,按 F6 也能强行脱困。 -
Added a panic warp shortcut for Benchwarp
Press F6 at any time to teleport directly to the last bench you sat on, without opening any menu.
This works even when stuck in combat, fallen into geometry, or locked by traps. -
删除房间随机模组中重复的 F6 快捷键
原来的房间随机模组也占用了 F6(随机传送一个未去过的房间),现在这个功能被注释掉,避免与脱困传送冲突。 -
Removed the conflicting F6 shortcut from the room randomizer mod
The original room randomizer used F6 to teleport to an unvisited room; this binding has been commented out to prevent conflict with the panic warp. -
在椅子模组菜单打开时,屏幕下方显示红色大号提示文字
当打开 Benchwarp 的传送菜单时,画面中下方会显示“按 F6 可直接传送”(英文为“Press F6 to warp directly”),字体放大至 48 号、红色、无背景。
菜单关闭后提示自动消失,不影响其他界面。 -
Added a prominent red tip below the Benchwarp menu
When the warp menu is open, a large red label (“按 F6 可直接传送” / “Press F6 to warp directly”) appears near the bottom centre of the screen.
The tip uses 48‑point font, no background, and disappears automatically when the menu is closed.
v1.4.5
-
设置面板所有文字颜色从蓝色改为冷白色(BrightWhite) 包括标题、按钮、开关、滑块等控件,提升阅读舒适度。 背景和按钮底色保持不变,仅调整文字颜色。
-
Changed all UI text color from blue to cool white (BrightWhite) Includes titles, buttons, toggles, sliders, etc., for better readability. Background and button base colors remain unchanged.
-
攻击方向选择(上劈、左劈、右劈)的设置现在会保存到存档 下次开游戏或切换存档时自动沿用上次的选择,无需重新设置。
-
Attack direction settings (up slash, left slash, right slash) are now saved per profile Your choices will be remembered when you restart the game or switch profiles.
-
英文翻译文件(en.json)修正 将之前混入的中文值改为正确的英文,统一术语,中英文切换时显示更准确。
-
Fixed English translation file (en.json) Replaced mixed Chinese entries with proper English, unified terminology, ensuring accurate display when switching languages.
-
界面图片素材重绘 按钮背景图(1.png、2.png、3.png)和面板背景图(4.png)重新绘制,提升整体美观度和一致性。
-
Redrawn UI image assets Button backgrounds (1.png, 2.png, 3.png) and panel background (4.png) have been redrawn for better visual consistency and aesthetics.
v1.4.4
-
解决剧情点被陷阱守住的问题 在 Bonetown 场景中禁用了矩形区域 (45,3) 到 (82,14) 内的所有陷阱生成,确保剧情点不受干扰。 其他场景的陷阱生成规则保持不变。
-
Fixed story points being blocked by traps Disabled trap generation in the rectangular area (45,3) to (82,14) within the Bonetown scene, ensuring story points remain accessible. Trap generation rules for other scenes remain unchanged.
-
模组与 Benchwarp(放椅子模组)绑定并提供本地化翻译 自动检测系统语言,若为中文则将翻译文件覆盖至 Benchwarp 的语言目录,实现全界面中文显示。 无需手动配置,即插即用。
-
Integrated with Benchwarp (bench warp mod) and added localization Automatically detects system language; if Chinese, overwrites the Benchwarp language file with a full Chinese translation. No manual configuration required, plug‑and‑play.
-
加入受击保护,重生点不再因陷阱攻击而卡出异常状态 在角色复活(
FinishedEnteringScene)时强制重置所有移动锁、受伤后摇、输入缓冲等状态,并给予 4 秒无敌时间。 无论遇到何种陷阱(包括岩浆、虚空等无视无敌的伤害类型),均能保证角色正常移动,不再被无限锁死。 -
Added hit protection; respawn points no longer cause abnormal movement states from trap attacks Forcibly resets all movement locks, recoil states, input buffers, etc. upon respawn (
FinishedEnteringScene), and grants 4 seconds of invincibility. Regardless of trap type (including lava, void, etc. that bypass normal invincibility), the hero will always regain control and avoid being permanently locked. -
推荐在游玩房随和陷阱随机时使用 Benchwarp 模组 放椅子模组可方便地设置重生点,配合陷阱随机与房间随机功能,大幅提升游戏体验。 两者已完美兼容,无需额外配置。
-
Recommended to use Benchwarp when playing with room randomizer and trap randomizer Benchwarp allows convenient respawn point setting, greatly enhancing the experience when combined with trap and room randomization. Both mods are fully compatible out of the box.
v1.4.3
-
新增尖刺类陷阱分类 独立出“尖刺类”,包含
wp_trap_spikes,organ_spikes,coral_spike,pilgrim_trap_spike,cradle_spikes,slab_spike_ball。 从原“暗雷”、“跳跳乐”、“触发型”中移除这些陷阱,避免分类重叠。 难度配额:初猎 2,专注 4,满溢 6,确保尖刺类稳定生成。 -
Added “Spike” trap category New category “尖刺类” includes
wp_trap_spikes,organ_spikes,coral_spike,pilgrim_trap_spike,cradle_spikes,slab_spike_ball. Removed these traps from original categories (Landmine, Platforming, Triggered) to avoid overlap. Difficulty quotas: Beginner 2, Focused 4, Overflow 6, ensuring consistent spike generation. -
平台缩放精细化 所有“平台类1”中的平台,除三个小平台(
small_grey_coral_plat,small_red_coral_plat,shell_small)外,统一缩小至原来的 1/3(0.33 倍)。 小平台保持原大小,避免过于微小影响跳跃。 -
Platform scaling refined All platforms in “平台类1” except three small ones (
small_grey_coral_plat,small_red_coral_plat,shell_small) are now scaled to 1/3 (0.33) of original size. Small platforms remain at full size to keep them usable for jumps. -
修复荆棘陷阱缩放错误 将荆棘(
ThornTraps)的缩放从错误的(0.5, 1, 0.33)修正为正确的(0.33, 0.33, 0.33),恢复预期的三分之一大小。 -
Fixed thorn trap scaling Corrected thorn trap scaling from incorrect
(0.5, 1, 0.33)to intended(0.33, 0.33, 0.33). -
平台表面点纳入陷阱候选(独立生成) 每次全新生成房间时,记录每个平台的上表面中心点(位置 Y + 0.5)。 在原有陷阱生成完毕后,以 30% 概率为每个平台表面点额外生成一个随机陷阱(陷阱池排除岩浆和下落类)。 额外生成的陷阱遵守所有常规规则(距离门、拾取物、其他陷阱等),并与主陷阱一同存入缓存。 此机制独立于原有配额,不干扰原有陷阱生成顺序和数量。
-
Platform top surfaces as independent trap spawn points On each fresh room generation, record the top center point of every platform (position Y + 0.5). After main trap generation, spawn an extra random trap on each platform surface with 30% chance (trap pool excludes lava and falling types). Extra traps respect all standard rules (distance to doors, pickups, other traps) and are cached alongside main traps. This mechanism operates independently of original quotas, preserving existing trap generation order and count.
-
平台生成时的空间检测范围缩小 将平台生成的包围盒检测从 20×20 缩小至 10×10,允许平台放置在更紧凑的空间,减少因空间不足而无法生成平台的情况。
-
Reduced platform placement bounding box Changed platform generation overlap check from 20×20 to 10×10, allowing platforms to fit in tighter spaces and reducing placement failures.
-
新增小平台硬编码列表 定义
SmallPlatforms集合,用于标记不需要缩放的平台。目前包含三个小型平台,可根据需要扩展。 -
Added hardcoded list of small platforms Defined
SmallPlatformsset to mark platforms that should not be scaled. Currently includes three small platforms; can be extended as needed. -
种子重置时平台表面点列表同步清空 在
ClearAllCache中增加_platformSurfacePoints.Clear(),确保更换种子后平台点列表被重置,避免残留点影响新种子下的陷阱生成。 -
Platform surface points cleared on seed reset Added
_platformSurfacePoints.Clear()inClearAllCache, ensuring the platform point list is reset when seed changes, preventing stale points from affecting new generation.
v1.4.2
-
难度机制大幅调整,挑战方向改变 陷阱不再只是静止的机关,而是有概率获得“生命化”效果——会自己移动(滑动、折线路径、钟摆)或做出原地动画(旋转、缩放、闪烁、抖动、浮动)。 玩家需要面对动态变化的陷阱布局,考验实时反应而非背板。
-
Difficulty system overhauled, challenge direction changed Traps are no longer static hazards. They now have a chance to become “alive” — moving (patrol, zigzag, swing) or performing stationary animations (spin, pulse, flicker, jitter, bounce). Players must adapt to dynamic trap behaviors, testing real‑time reactions instead of memorization.
-
陷阱移动系统大幅扩展 原有移动方式(贴地滑动、折线路径、钟摆摆动)基础上,新增 5 种原地动画: 旋转、缩放脉冲、闪烁(时隐时现)、微小抖动、上下浮动。 所有陷阱(岩浆除外)获得移动效果时,从全部 8 种风格中等概率随机选择一种。
-
Trap movement system expanded Added 5 stationary motion types on top of existing styles (surface patrol, zigzag, needle swing): Spin, Pulse, Flicker, Jitter, Bounce. When movement is enabled, traps now randomly choose from all 8 styles with equal chance (lava excluded).
-
彻底修复陷阱重叠问题 每次进入房间前清空所有旧陷阱,且所有分类的陷阱均参与位置去重(原先障碍物/装饰物不检查距离)。 同一位置再也不会出现两个重叠的陷阱,多次进出房间也不会累积副本。
-
Fixed trap duplication All old traps are now cleared before each spawn, and all trap categories participate in distance de‑duplication (previously obstacles/decorations did not). No more overlapping traps at the same spot, no accumulation on room re‑entry.
-
大型陷阱放置优化 将大型陷阱检测半径从 4 恢复为 7,减少齿轮、风扇等陷阱堵住狭窄通道的概率。
-
Large trap placement improved Restored large trap check radius from 4 back to 7, reducing the chance of gears/fans blocking narrow passages.
-
陷阱分类重新划分 根据名称语义,将雕像、生物、幼崽、跳蚤、蚊子、气球、植物、蛋、茧、NPC、雪块、水晶等从“障碍物”移至“装饰物”。 “障碍物”仅保留弹跳类、硬壳、热煤等真正具有交互或伤害的物体。 修复了装饰物因分类重叠而永远无法生成的错误。
-
Trap categories reorganized Reclassified traps by name semantics: moved statues, creatures, bugs, balloons, plants, eggs, cocoons, NPCs, snow chunks, crystals from "Obstacle" to "Decoration". "Obstacle" now only contains bounce objects, crusts, hot coal, etc. Fixed decorations never spawning due to category overlap.
-
墙壁荆棘增加竖向支撑检测 墙壁类陷阱(荆棘)现在要求放置点上下 3 单位内均有墙体表面,避免悬空或穿模。 只有通过该检测的墙面点才被视为有效。
-
Wall thorns now require vertical support Thorn traps (wall category) now require a solid surface both above and below (within 3 units) to prevent floating or clipping. Only wall points passing this check are considered valid.
-
移除所有调试日志 删除了陷阱生成过程中的所有
Plugin.Log输出,减少运行开销和日志噪音。 -
Removed all debug logging Removed all
Plugin.Logcalls during trap generation to reduce runtime overhead and log clutter.
v1.4.1
-
新增加跳跳乐与平台分类存储
- 在 TrapPreloader 中新建"跳跳乐1"分类,包含 43 个弹跳物
- 在 TrapPreloader 中新建"平台类1"分类,包含 18 个平台
- 目前仅作存储,不参与陷阱配额生成,不影响原有陷阱系统
- 旧齿轮分类改名"旋转齿轮",避免与新的跳跳乐混淆
-
Added bounce and platform category storage
- New "跳跳乐1" category in TrapPreloader with 43 bounce objects
- New "平台类1" category in TrapPreloader with 18 platforms
- Currently storage only, not used by quota system, no impact on existing traps
- Old gear category renamed to "旋转齿轮" to avoid confusion
-
新增弹跳物生成系统
- 每个陷阱旁边会尝试放置一个弹跳物,距离固定为 6 格,角度在 -30° 到 30° 之间
- 先在陷阱斜上方找位置,找不到再在斜下方找,两边都不行才放弃
- 弹跳物之间至少间隔 8 格,避免挤在一起
- 弹跳物至少离地 3 格,不会卡进地面
- 路径和目标点都没有地形阻挡才放置,不会穿墙
- 拾取物周围 7 格内不放置,不干扰正常拾取
- 弹跳物位置随种子固定,同一种子进同一房间位置不变
-
Added bounce object generation
- Each trap gets one bounce object placed 6 units away, angle between -30° and 30°
- Tries above the trap first, then below if no valid spot found
- Minimum 8-unit spacing between bounce objects
- Placed at least 3 units above ground, won't clip into floors
- Raycast checks ensure no terrain blocking the path or target point
- Keeps 7-unit distance from pickups, won't interfere with items
- Positions are seed-determined and stay consistent on revisit
-
新增平台生成系统
- 每个陷阱周围会尝试放置最多两个平台,距离在 6 到 10 格之间
- 平台要求周围 20×20 的矩形范围内没有任何地形,确保有足够空间
- 平台之间至少间隔 8 格
- 生成不了两个就生成一个,一个都生成不了就跳过
- 平台位置随种子固定,同一种子进同一房间位置不变
-
Added platform generation
- Each trap gets up to two platforms at 6–10 units distance
- Platforms require a 20×20 clear area with no terrain overlap
- Minimum 8-unit spacing between platforms
- Spawns one platform if two can't fit, skips if none work
- Positions are seed-determined and stay consistent on revisit
v1.4.0
-
纹章随机池移除巫妪诅咒纹章
- 随机神龛现在不会产生“巫妪(诅咒版)”纹章,避免无法切换和无法回血的极端情况
- 正常的巫妪纹章仍然可以随机获得
-
Removed cursed Witch crest from the crest random pool
- Shrines no longer give the cursed Witch_v2 crest, preventing unswappable/no-heal states
- The normal Witch crest can still be obtained randomly
-
修复冰冻陷阱在相邻房间连续出现的问题
- 如果上一个房间有冰冻效果,进入下一个房间时会自动清除冰冻陷阱,并不会生成新的冰冻
- 不再依赖房间随机化连接文件,改为实时检测
-
Fixed frost traps appearing in consecutive rooms
- If the previous room had a frost marker, entering the next room now clears any frost traps and prevents new ones from spawning
- No longer relies on room connection files, now uses real-time detection
-
修复缓存导致同类陷阱扎堆排列的问题
- 房间缓存重新生成时,对所有已验证的陷阱进行一次随机打乱,避免相同类型陷阱连续放置
-
Fixed cached traps clumping together by type
- When reusing room caches, the validated trap list is now shuffled before spawning, preventing consecutive placement of the same trap type
-
面板外观改善
- 添加了自定义面板背景图(4.png),拉伸覆盖整个设置窗口
- 难度选择按钮支持自定义精灵图(1.png、2.png、3.png),图片作为按钮背景,宽度与按钮对齐,文字居中标示
- 对应图片需放入 nandu 文件夹内
-
Panel visual improvements
- Added a custom background image (4.png) that stretches across the entire settings window
- Difficulty buttons now support custom sprite backgrounds (1.png, 2.png, 3.png); images align with button width while text remains on top
- Images are loaded from the nandu folder
v1.3.8
-
修复了部分触发类陷阱的生成位置和朝向
- 现在这些陷阱会先生成触发器(压力板或触发区),再根据规则在触发器周围生成陷阱本体
- 小摇摆陷阱放在触发器正上方 8 格
- 大摇摆陷阱放在触发器正上方 15 格
- 腐汁陷阱放在触发器右边 10 格
- 碎石区在触发器上方 0.5 格
- 猎人地雷翻转 180 度,藏在触发器下方 1 格
- 猎人镰刀放在触发器正上方 6 格,保持原来的方向不变
- 其他触发类陷阱暂不调整
-
Fixed spawn positions and rotations for some triggered traps
- Traps now spawn their activator first, then place the trap body according to offset rules
- Small swing trap placed 8 units above its activator
- Large swing trap placed 15 units above its activator
- Bilewater trap placed 10 units to the right of its activator
- Rubble field placed 0.5 units above its activator
- Hunter landmine flipped 180 degrees and placed 1 unit below its activator
- Hunter sickle trap placed 6 units above its activator, no rotation
- Other triggered traps remain unchanged
v1.3.7
-
修复面板难度按钮切换无反应
- 切换难度后自动清空当前陷阱并重新生成
-
Fixed difficulty buttons not responding on the panel
- Switching difficulty now clears current traps and regenerates them
-
新增陷阱生命化开关
- 右侧面板难度下方增加"陷阱生命化"按钮,独立控制陷阱是否获得移动能力
- 关闭后已有陷阱不会自动清除,新生成的陷阱不再附加移动效果
- 开启后清空当前陷阱并重新生成,新陷阱按 40% 概率附加随机运动
- 开关状态自动保存,重启游戏保持上次设定
-
Added trap movement toggle
- "Trap Life" button added below difficulty settings on the right panel, independently controls whether traps gain movement
- When disabled, existing traps remain but new traps will not receive movement
- When enabled, clears current traps and regenerates them with 40% chance of random movement
- Toggle state is automatically saved and persists across game restarts
功能使用说明
陷阱难度:点击「初猎」「专注」「满溢」三个按钮之一即可切换难度。选中的按钮会变为绿色高亮。切换后房间内的陷阱会立刻清空并按新难度重新生成。
陷阱生命化:位于难度选择下方,显示「陷阱生命化」及当前开关状态(开/关)。点击即可切换。打开时,每次进入房间生成的陷阱有概率自己动起来(沿平台滑动、走折线路、或像钟摆摆动),速度可能是温顺、调皮或忽快忽慢。关闭后新生成的陷阱则保持静止。开关状态会自动保存。
v1.3.6
-
适配 Architect 3.28.0
- ObjectPlacement 构造函数新增 layer 参数,补齐陷阱生成与激活器的反射调用
-
Adapted to Architect 3.28.0
- Added missing layer parameter to ObjectPlacement constructor for trap spawning and activator reflection
-
修复场景切换时陷阱随机自动关闭
- 移除 OnSceneLoaded 中重复的 Initialize 调用,开关状态不再被配置文件覆盖
-
Fixed trap randomizer turning off on scene transition
- Removed redundant Initialize call in OnSceneLoaded, preventing state overwrite from config file
-
新增陷阱移动系统
- 实现贴碰撞箱往复、随机折线闭合路径、指针式摆动三种持续移动方式
- 加入性格系统:友善(慢速)、调皮(快速)、阴险(时快时慢)
- 陷阱生成时有 40% 概率附加随机移动和性格(岩浆除外)
-
Added trap movement system
- Implemented three continuous movement styles: surface patrol, zigzag loop, and needle swing
- Added personality system: Friendly (slow), Playful (fast), Sinister (alternating speed)
- 40% chance for traps (except lava) to gain random movement and personality on spawn
v1.3.5
-
调整陷阱分类生成配额
- 各分类最大生成数量固定:暗雷(1/3/5)、跳跳乐(1/3/5)、窄道(1/3/5)、平台类(1/3/5)、墙壁(1/3/5)、天花板(3/3/5)、障碍物(2/4/5)、装饰物(2/3/5)、触发型(3/5/7)、追逐型(0/1/2),场景伤害类完全由独立事件控制
- 冰霜印记按难度概率:Beginner不出现,Focused 10%,Overflow 20%
- 额外岩浆池固定30%概率且仅在水体区域生成
-
Adjusted trap category quotas
- Maximum spawn counts locked: Landmines(1/3/5), Platforming(1/3/5), Narrow(1/3/5), Platforms(1/3/5), Walls(1/3/5), Ceiling(3/3/5), Obstacles(2/4/5), Decorations(2/3/5), Triggered(3/5/7), Chase(0/1/2), scene hazards fully event-driven
- Frost markers probabilistically: Beginner never, Focused 10%, Overflow 20%
- Extra lava pool at fixed 30% chance, water surfaces only
-
技能随机新增法术动画
- 随机获得的技能在施放时播放对应角色动画,与技能类型绑定
-
Skill randomizer now plays spell animations
- Randomly acquired skills trigger matching character animations on cast, bound to skill type