
夜之城铭记
你在生命中所做的一切,将会永久回响!或者,至少,大概...持续14天左右吧。或多或少几天。 ⚞◉⏖◉⚟ 我的游戏大修系列的第3/6部分。
查看大图夜之城有记忆
简介
在原版游戏中,你可以在沃森区消灭一半的漩涡帮成员,幸存者既不知道也不在乎,该派系当然也不会记仇。一个下午杀掉50个虎爪帮成员?你遇到的下一群人会像对待陌生人一样对待你。夜之城没有记忆。
夜之城有记忆让各个帮派有了一点记忆……如果你在足够短的时间内杀够某个派系足够多的成员,他们会对你产生敌意。但这里有个转折——他们不能因为没人看见的事情而责怪你。每次击杀都会先进入一个待定队列。只有当同派系的NPC在尸体附近发现你时,这笔击杀才会算在你头上。在屋顶上用狙击枪射击而没有目击者?没人知道是谁杀了尼尔斯。可怜的尼尔斯。尼尔斯到底对你做了什么,你这个怪物?!总之……如果你在尸体附近被同派系成员认出,并且在给定的时间范围内,那么这笔击杀就会被归在你名下。
在战斗中,每个NPC都有机会认出你的身份,如果他们认出了你,而你没有足够快地杀掉他们,他们的派系就会知道是你干的。光天化日之下对付四个混混可能很容易,但也意味着你有可能被记上四次击杀,从而导致整个派系对你产生敌意。
然后是瘟疫。瘟疫就是你,而且瘟疫似乎只影响帮派成员。奇怪的是竟然会这样……把一个派系逼得太紧,他们的人口就会开始下降。继续逼迫,他们就会灭绝。从满员到被消灭共有八个等级。夜之城有记忆——但前提是它看见了,而且还有活着的目击者。
太长不看:帮派会追踪你的击杀、记仇,最终走向灭绝。但前提是他们能抓到你。( -_•)︻デ═一
基础设施
这个模组不仅是为了我自己的模组而运作,也是为了给其他模组提供一个集中追踪派系/帮派状态的平台。
因此,下面有一个专门给模组作者的部分,介绍相关API。
击杀归属
当你杀死一个NPC时,死亡事件会进入一个待定队列——不会立即归咎于你。只有当你在击杀地点(默认150米)范围内被同派系NPC认出时,这笔击杀才会被计入。
无人目击的击杀会在90分钟游戏时间后过期。如果没人把这些线索联系起来,你就全身而退了。
识别功能由街头感知的侦测系统处理——距离、潜行、伪装和时机都会影响识别。
派系敌对
一旦累积了足够多的目击击杀(默认25次),整个派系都会转为敌对。不仅仅是发现你的那个NPC——是整个帮派。附近新刷新的成员也会立即敌对。使用原版的敌对阵营系统来实现可靠的传播。
当击杀数衰减到阈值的一半以下时,敌对状态会清除。时间能治愈一切创伤,即使在夜之城也不例外。
派系敌对粘滞
在某些情况下,派系的敌对状态可能会变得粘滞——无法正确重置。这可能是由于竞态条件(两个系统同时试图操作相关参数,导致一个系统误以为操作成功而实际上并未成功),而且这类问题很难防御性地进行编码,因为我们也必须时刻注意性能,不能过度操作(比如反复检查:我们真的、真的、真的做到了吗?!),但我们至少可以为它做好规划并提供一个修复方案。
对于大多数派系来说,这是良性的(默认值是中立,NCR写入的也是中立值)。但该系统也会为拾荒者和幽灵写入敌对默认值,以及任何用户自定义的值——如果保存时态度是敌对的,即使NCR关闭后,引擎也会记住这一点。
修复方案是一个新的辅助函数,它会遍历所有NCR管理的引擎态度关系,并写入其持久化字段。
如果需要触发此功能,请按以下步骤操作:
- 打开设置,启用NCR的“启用派系态度”
- 保存游戏,退出到主菜单,重新加载存档
- 打开设置,禁用“启用派系态度”
关闭转换会触发自动重置,并将中立设置写入所有派系。当自动重置触发时,你应该会看到一条警告消息:“派系态度已重置为基线。”
记忆衰减
击杀记录存储在按天分组的桶中(可配置为7/14/21天)。当一天结束时,最旧的那个桶会被丢弃。如果每天只杀1个,而记忆窗口是7天,你就永远不会达到阈值。大开杀戒?那些击杀记录至少会保留一个星期。
这里没有随机性,只有干净的逐日递减。
派系灭绝
继续杀戮,派系人口就会开始下降。共有八个状态等级:
- 满员 > 运转正常 > 捉襟见肘 > 枯竭 > 支离破碎 > 残余势力 > 背水一战 > 彻底清除
各派系初始人口:
- 瓦伦蒂诺帮:6000
- 虎爪帮:5500
- NCPD:4000
- 荒坂:3500
- 军用科技:3000
- 巴格斯特:2500
- 第六街:2300
- 野兽帮:2000
- 漩涡帮:1300
- 康陶:1000
- 拾荒者:800
- 幽灵:800
- 创伤小组:500
- 巫毒帮:350
- 莫克斯帮:400
- 阿德卡多:1200
- 网监:200
- 生物科技:600
- NUSA:3000
- 来世雇佣兵:500
启用刷新剔除后,已灭绝的派系将完全停止刷新。他们的地盘会变得出奇地空旷。任务NPC、同伴和人群始终受到保护——只有开放世界的帮派刷新会被剔除。
剔除几率随等级变化:在“捉襟见肘”时为15%,在“枯竭”时为35%,最高在“彻底清除”时达到100%。
警告:此功能尚未经过充分测试,开启后可能对你的存档产生不良后果,因此该功能默认是关闭的!
派系再生
帮派不会坐以待毙,至少大多数不会。每个游戏日,派系都会根据其故事背景中的规模和影响力招募新成员。
每日招募率:
- NCPD:10/天
- 瓦伦蒂诺帮:8/天
- 虎爪帮:5/天
- 第六街:5/天
- 荒坂:4/天
- 军用科技:4/天
- 漩涡帮:3/天
- 巴格斯特:3/天
- 野兽帮:2/天
- 拾荒者:2/天
- 康陶:1/天
- 创伤小组:1/天
- 幽灵:1/天
- 巫毒帮:0/天
- 莫克斯帮:1/天
- 阿德卡多:2/天
- 网监:0/天
- 生物科技:1/天
- NUSA:6/天
- 来世雇佣兵:1/天
计算方法很简单:剩余 = 人口上限 - 你的击杀数 + 补充成员。杀得比他们招募的快,他们就会减少。杀得慢,他们就会恢复。完全停止杀戮,给他们足够的时间,他们就会恢复到满员状态。
其他细节
- 非致命制服 - 与击杀分开追踪。将某人击晕不会使派系敌对——只有击杀才会。致命制服算作击杀。
- 强尼的问题 - 强尼闪回序列中的击杀不计算在内。
- 持续敌对 - 派系敌对状态在存档/读档后依然保留。当你重新加载存档时,敌对派系会在首次遇到NPC时通过原版的态度系统重新生效。
- 战斗识别 - 与街头感知的战斗识别系统配合。在战斗中转为敌对的NPC可以认出你,从而在战斗中将击杀归到你头上。不要留下目击者。
统计界面
枢纽菜单中的“派系状态”按钮会显示所有20个派系的击杀数(已归咎、待定、累计)、制服数、敌对状态、灭绝等级和人口。
这些计数器是NCR独有的,这意味着如果你在游戏中途安装它,你之前已经完成的击杀不会被计算在内。
选项
所有选项都在Modsettings中的“夜之城有记忆”下。
启用模组:开关。默认开启。 整个系统。
显示选项:开关。 显示下面的调节选项。
2. 击杀归属
归属半径(米):滑块。 同派系NPC需要离击杀地点多近才能将击杀归咎于你。
待定击杀过期时间(分钟):滑块。 无人目击的击杀在待定队列中保留多久后才会被遗忘。
3. 敌对
敌对阈值:滑块。 派系转为敌对所需的目击击杀次数。
允许NCPD敌对:开关。默认关闭。 允许NCPD像帮派一样累积基于击杀的敌对值。关闭 = NCPD永远不会仅因击杀而敌对,但你仍然可以通过派系态度将其设置为敌对。
4. 记忆衰减
击杀记忆(天数):滑块。 击杀记录会被记住多少个游戏日。更早的击杀会被丢弃。
5. 人口
启用人口下降:开关。 派系人口会随着你的击杀而减少。驱动灭绝等级。
击杀倍率:滑块。 每次击杀导致人口下降的速度。越高 = 灭绝越快。
<派系> - 人口上限:滑块。范围0-10000,步进100。 每个派系一个。夜之城的总体人口——你的累计击杀数将与此对比以确定灭绝等级。设为0可完全禁用该派系的灭绝追踪。
<派系> - 每日招募:滑块。范围0-50,步进1。 每个派系一个。每个游戏日招募的新成员,在击杀后补充人口。对于不在本地招募的派系设为0(巫毒帮和网监的默认值)。
根据故事背景调校的默认值与上述“派系灭绝”/“派系再生”部分列出的数值一致。如果你想创造一个更温和或更严酷的世界,滑块可以轻松调高或调低这些数字。
6. 刷新剔除
启用刷新剔除:开关。默认关闭。 已灭绝的派系停止刷新。他们的地盘变得安静。因为会显著改变游戏世界,所以默认是选择加入的。
7. 报告显示
显示已归咎 / 待定 / 击杀 / 制服列:开关。 在派系状态报告中分别显示或隐藏每一列。
显示枢纽菜单按钮:开关。 如果你不想让“派系状态”按钮碍事,就把它从枢纽菜单中隐藏。隐藏它会移除在游戏中查看报告的方式。
报告字体大小:滑块。范围24-48,默认36。 如果在你当前分辨率下列超出屏幕边缘,可以调低字号。表头和单元格会同步缩放。
30-43. 派系态度
NCR集成了派系态度切换器。启用派系态度和显示态度设置以访问所有关系滑块。
- 30. 派系态度 - 该系统的总开关。
- 31. 玩家 vs 派系 - 你对每个派系的基础态度(0=友好,1=中立,2=敌对)。击杀追踪可以将中立升级为敌对。
- 32. NCPD vs 派系 - NCPD如何对待每个帮派。
- 33. 创伤小组 vs 派系 - 创伤小组的关系。
- 34. 第六街关系 / 35. 漩涡帮关系 / 36. 虎爪帮关系 / 37. 野兽帮关系 / 38. 拾荒者关系 / 39. 瓦伦蒂诺关系 / 40. 巫毒帮关系 - 每个帮派对其他帮派的关系(三角关系——每对只列出一次)。
- 41. 企业关系 - 荒坂 / 军用科技 / 康陶对帮派及彼此的关系。
- 42. 其他关系 - 幽灵、巴格斯特、莫克斯帮中不适合放在其他类别的关系对。
- 43. 阿德卡多关系 - 阿德卡多对其他派系的关系。
所有值:0=友好,1=中立,2=敌对。更改会在游戏加载时生效。取代派系态度切换器——如果使用本模组,请卸载FAT。
8. 调试
调试日志:开关。 将击杀归属、敌对和灭绝事件打印到Gamelog。
面向模组作者
NCR提供了一个API,让其他模组可以在不重复造轮子的情况下,基于派系击杀数据构建功能。模块名称:NightCityRemembers。
快速开始
保护你的代码,使其在有无NCR的情况下都能编译:
@if(ModuleExists("NightCityRemembers"))
import NightCityRemembers.*
@if(ModuleExists("NightCityRemembers"))
public static func MyMod_GetMaelstromKills(gi: GameInstance) -> Int32 {
let ncr = NCRSystem.Get(gi);
if !IsDefined(ncr) || !ncr.IsEnabled() { return 0; };
return ncr.GetKillCount(0); // 0 = Maelstrom
}
@if(!ModuleExists("NightCityRemembers"))
public static func MyMod_GetMaelstromKills(gi: GameInstance) -> Int32 {
return 0;
}
系统访问
let ncr: ref<NCRSystem> = NCRSystem.Get(gi);
返回系统实例,如果NCR未激活则返回null。务必进行null检查。
可用方法
击杀数据:
- GetKillCount(factionIndex) - 当前衰减窗口内已归咎的击杀数
- GetTotalKillCount(factionIndex) - 累计击杀数(永不衰减)
- GetPendingKillCount(factionIndex) - 等待目击者归属的击杀数
- GetTakedownCount(factionIndex) - 非致命制服数(单独追踪,不影响敌对)
派系状态:
- IsFactionHostile(factionIndex) - 如果该派系目前对V敌对,则返回true
- GetFactionExtinctionTier(factionIndex) - 0-7,其中0=满员,7=彻底清除
- GetFactionExtinctionStatus(factionIndex) - 人类可读的等级名称(“捉襟见肘”、“枯竭”等)
- GetFactionPopulationPercent(factionIndex) - 0.0-100.0,该派系剩余人口的百分比
- GetFactionPopulationCap(factionIndex) - 该派系当前配置的上限(感知滑块变动)
- GetFactionReplenishRate(factionIndex) - 当前配置的每日招募率(感知滑块变动)(自3.5.0起)
人口写入API (自3.5.0起):
- AdjustPopulation(factionIndex, delta, reason) - 返回布尔值。将派系人口推进delta个成员。正数 = 增援(上限为累计击杀数),负数 = 损失(每日招募会按该派系的滑块速率随时间补回)。reason是一个字符串,在NCR的调试日志开启时会记录。如果NCR被禁用或派系索引超出范围,则返回false。
使用场景示例:招募激增事件(“巫毒帮本周大力招募,+50/天持续7天”)、中间人发布的帮派清剿任务(“在幕后消灭200个野兽帮”)、敌对派系屠杀(“幽灵刚刚消灭了一个漩涡帮小组”)。
实用工具:
- IsEnabled() - NCR是否激活?
- IsExtinctionEnabled() - 灭绝子系统是否开启?
- IsSpawnCullingEnabled() - 刷新剔除是否开启?
- GetFactionName(factionIndex) - “漩涡帮”、“虎爪帮”等。
派系索引映射
0 = Maelstrom
1 = Tyger Claws
2 = Animals
3 = Scavengers
4 = Valentinos
5 = Voodoo Boys
6 = Sixth Street
7 = Arasaka
8 = Militech
9 = Kang Tao
10 = Trauma Team
11 = Wraiths
12 = Barghest
13 = NCPD
14 = The Moxes
15 = Aldecaldos
16 = NetWatch
17 = Biotechnica
18 = NUSA
19 = Afterlife Mercs
从gamedataAffiliation转换:NCRFactions.GetIndex(affiliation)。对于不受追踪的隶属关系返回-1。
重要说明
- 击杀/敌对/制服状态对外部是只读的。不要直接操作NCR的内部槽数据——它自己管理持久化、衰减计时和迁移。
- 人口状态有一个官方写入入口点:AdjustPopulation。它通过NCR自然的招募计算来应用变更,确保行为与玩家在报告中看到的一致。
- GetKillCount返回衰减窗口计数(驱动敌对)。GetTotalKillCount是累计的,永远不会重置。
- 敌对是确定性的——纯粹基于击杀数与阈值的比较。没有随机数生成。
- 待定和已归咎的击杀都会在存档/读档后保留(自3.4.0起)。你不能再通过快速存档来洗白你的潜行突袭了。
更新日志
1.0.0 - 初始测试版本。击杀追踪、敌对、灭绝、枢纽菜单统计。 1.1.0 - 击杀归属系统(待定队列、目击者要求、按天分桶衰减)。 2.0.0 - 刷新剔除、强尼闪回开关、灭绝等级重命名、累计追踪。 2.1.0 - 致命制服修复、累计计数器与目击者解耦。 2.2.0 - 首次公开发布。 2.4.0 - 莫克斯帮加入为第15个受追踪派系。报告显示开关:单独隐藏/显示已归咎、待定、击杀、制服列。 3.0.0 - 集成派系态度切换器v1。派系动态:帮派之间的动态默认设置为符合故事背景的设置。可在ModSettings中调整。玩家对派系的默认值也已添加并可调整。情报报告现在会通过添加(基础)来报告帮派是否处于其基础水平。颜色更新略有变动,添加了更多派系。 3.1.0 - 显示枢纽菜单按钮开关、报告窗口字体滑块。四个新派系:网监、生物科技、NUSA、来世。 3.2.0 - 针对无群体派系的每NPC态度。 3.3.0 - 快速破解击晕追踪(短路、重启视觉等现在会登记为制服)。 3.4.0 - 重大更新!૮ ˆﻌˆ ა 新增:
- 待定击杀现在在存档后保留。快速存档不再能洗白潜行突袭。
- 灭绝现在读取累计击杀数,而不是滚动目击窗口。被消灭的帮派保持被消灭状态,而不是随着窗口衰减而悄悄恢复。
- 制服去重修复 - 手动非致命制服不再在钩子之间重复计数。 Bug修复:
- 外部模组API现在为派系14-19(莫克斯、阿德卡多、网监、生物科技、NUSA、来世)返回正确的人口数据——之前是硬编码为“满员”。
- 移除了8个无效的NCPD/创伤小组态度滑块(更改它们在游戏世界中没有任何效果)。 性能: 待定击杀持久化从O(N)优化为O(1)热路径(大规模枪战大约快10倍)。派系状态页面分配从约160次降到2次。 3.4.1 - 不再覆盖任务敌对(赛博精神病等) 3.5.0 - 每个派系的人口滑块 + 写入API。 新增:
- 40个新的ModSettings滑块:每个派系现在都有自己的人口上限和每日招募滑块。可以单独调整每个帮派的难易程度。
- 面向其他模组的AdjustPopulation API:正数增量 = 增援,负数 = 损失。驱动诸如中间人任务、招募激增、敌对帮派屠杀等风味模组。
- GetFactionReplenishRate读取器,让外部模组可以查看当前配置的每日速率。 翻译: 所有ModSettings标签和描述现在都通过DigitalVixenCore的翻译层路由(需要DVCore ≥ 3.19.3)。 3.5.1 - 热修复:ModSettings调整静默破坏了派系灭绝报告 3.5.2 - 更多翻译修复。 3.5.3 - 修复:禁用系统后持久化态度状态仍然粘滞,参见**- 派系敌对粘滞 -** 了解说明。 3.5.4 - 不再尝试剔除由Drug Dealer模组生成的NPC,因此不再中断突袭导致无法清空。 3.7.0 - 更新为需要Redscript Configuration Framework。支持18种语言的翻译 + 英语 = 共19种语言,配置现在在游戏内通过一个干净整洁的弹窗完成。 3.7.1 - 日志已移至可选的RedLogger插件,为Mod Picker和游戏内百科添加了卡片和文档。
前置要求
此模组要求你安装以下内容: Redscript Codeware Street Sense DigitalVixen Core Redscript Configuration Framework
可选但推荐: RedLogger - 为日志增加粒度。
对于3.7.0之前的版本: Mod Settings
设计为可协同游玩:
我的其他模组
以下所有模组都能很好地协同工作:
- Lightweight Crowd Duplicate Randomizer - 减少NPC重复出现的几率
- Atelier Price Fixer - 为缺少价格的商店设定价格
- Gravefiller - 让你决定容器里到底能装多少虎爪帮成员
- Thread Locker - 锁定你的衣柜,迫使你随身携带衣物(自动)
- Flesh And Chrome Carry Capacity Overhaul - 大改背包空间
- Midnight Acquisition - 只要你有技术,就可以保留你偷来的车
- True Night Vision - 通过你的Kiroshi义眼获得夜视能力,多种颜色
- True Sunglasses - 太阳镜真的有遮阳效果了,不同的眼镜提供不同的遮阳度
- Switchable Extra Quickslots - 更多的小工具槽,并使它们和生命物品槽可以通过热键切换
- True First Person Camera - 改变相机行为,给你真实的身高,并可选择性地开启头部
- Wardrobe At Car - 允许你在后备箱处完全使用衣柜,与Thread Locker搭配效果很好
- It Wasn't Me - 阻止NCPD错误地指控你犯罪……有时
- The Thin Blue Line - NCPD现在拥有可耗尽的资源。杀够他们的人,他们就会撤退并放过你。
- Calendar - 这个模组追踪你开始游戏以来的日期(以“救援”任务作为日期起点),并根据任务进行调整。
- Healing - 将治疗物品恢复为一次性使用,也允许你调整冷却时间和效果。
基础设施模组和补丁:
- 0-Engine - CET基础设施模组,旨在帮助减轻系统负担
- 0-Engine Enhanced Mods - 已经增强为使用0-Engine的模组
- Gunsensical plus Sabbath equals love - 重新平衡Sabbath的枪械,使其更符合Gunsensical的风格。
推荐
我喜欢并且可以真正担保的模组:
- Drug Dealer - Become a Kingpin - 一个令人惊叹的附加组件,现在几乎可以算是一个独立的DLC了!
- Gunsensical - 让枪械真正造成伤害,无论是你的还是NPC的。
- Immersive Grenades - 将手榴弹变为一次性物品——对经济和玩法都非常棒!
- StealthRunner - 包含自动兼容性补丁,它们配合得很好。
- Economy Punk - 在很大程度上修复了经济系统。
- Enemy Rarity Fixes - 纠正了许多角色记录,并修正了许多敌人的斯安威斯坦分配。非常推荐使用。
- Night City Traffic Overhaul - 允许派系/帮派进入其他帮派的地盘进行突袭,与NCR和FAT结合使用会让事情变得有趣!
- Reinforcements System - 允许帮派成员在你大量屠杀他们时呼叫增援!
- Immersive Cyberware - 将HUD元素锁定在付费墙后面!
- Perkware 2.0 - 使得义体医生处可以购买专长
- V's Edgerunner Mansion Reloaded - 豪宅回归!
- Sheng Noods Ramenshop - 我喜欢为世界添加内容的模组,这个很棒!
- ... 太多了数不过来!外面有太多太多优秀的模组了!
不兼容性
夜之城有记忆取代或接替了以下模组。它们不兼容,在安装前应将其移除。
不兼容:
- They Will Remember - NCR是从零开始的重制替代品。两者都会追踪派系击杀并应用敌对。同时运行会导致所有内容重复计数。
- Faction Extinction - NCR包含自己的灭绝系统。存在同样的重复计数问题。
- Night City Alive - NCA的派系设置与NCR不兼容,但其在车辆中生成帮派成员的功能是兼容的——这是针对RedMod版本的说明,我还没有研究过新的Redscript版本的做法。
- Faction Attitudes Toggler - NCR现已完全集成FAT。非常感谢cradilyex允许我这样做!
安装
- 安装所有依赖项(包括Street Sense)。
- 如果已安装They Will Remember和/或Faction Extinction,请将其移除。
- 将下载的文件解压到你的游戏主目录中。
- 启动游戏并在Mod Settings -> Night City Remembers下进行配置。
卸载
删除目录 \Cyberpunk 2077\r6\scripts\NightCityRemembers
击杀数据保存在你的存档文件中,但在移除模组后不会引起问题。派系只是……忘记了。就像过去一样。
致谢
夜之城有记忆是一个从零开始的重制实现,灵感来源于They Will Remember和Faction Extinction。没有复制任何代码,但最初的派系关系矩阵来源于TWR/FE的实现,并已扩展到20个派系。
感谢CET和redscript社区提供的工具和文档。
特别感谢NightlyNow推动我做得更好,敢于做更多。感谢NyxLachrimae帮助测试、提供想法和进行一般性讨论。感谢ApoKrytia进行测试和提供深刻的见解。还要感谢cradilyex的反馈和测试。没有你们我做不到!(˶ᵔᗜᵔ˶)ノ゙
感谢所有优秀的模组作者,他们持续为我们所有人创作免费的内容!
DigitalVixen模组套件的一部分。 你现在可以在Discord上找到我,点击这里!
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。