怎么给《Cyberpunk 2077》制作功能性MOD

Cyberpunk的官方mod支持【REDmod】:https://www.cyberpunk.net/zh-cn/modding-support。官网有三个视频教程,其中第二集演示了脚本的替换,比较合程序员的胃口。

REDmod 是《赛博朋克 2077》的免费 DLC(须购买游戏之后才能下载),集成了在游戏中安装和读取游戏模组的功能,同时提供专门为《赛博朋克 2077》创建游戏模组的全新官方修改工具。您可以单独使用 REDmod 游戏模组工具(在命令行中),或者将其集成在 WolvenKit 游戏模组编辑器中(能够获得最佳体验,便于操作,推荐使用)。WolvenKit 可以从这里下载,启动时会自动检测 REDmod 是否已经安装。

WolvenKit is an open-source modding tool for Cyberpunk 2077 and The Witcher 3: Wild Hunt. Our vision is to develop a standalone software which can read and write all REDengine file formats, simplify and accelerate modding workflows, and help you create great mods for great games.

REDmod可以做贴图(texture)、骨骼动画(animation)和文件级别脚本的替换。功能性MOD自然要做脚本替换。但是,2052个脚本文件,该从哪里下手?😓

还有一个问题:文件级别的脚本替换,颗粒度太粗,容易引起MOD之间的冲突(e.g. 两个MOD都修改了同一个脚本文件)。于是就有了函数级别的脚本替换,redscript登场!redscript是开源的。两分钟看懂redscript的语法;“How to create a hook” 这一篇里有个实战演练:当NPC被子弹击中时增加一个ragdoll效果——思路很棒!遗憾的是,修改的脚本里用到的都是现有脚本接口和功能。怎么在脚本里扩展调用native接口呢?

逛一逛Discord社区。真心诚意的发问,换来一个大发慈悲的回答:

red4ext登场啦!官方介绍:RED4ext is currently only a plugin manager for plugins that extend REDengine 4. It takes care of loading the plugins for the specified game's version.

对于开发者来说,真正要打交道的是RED4ext.SDK。RED4ext.SDK is a library that can be used to extend REDengine 4. The library provides the following features:

  • Interacting with the game's scripting VM (e.g. calling functions or accessing class properties);
  • Creating new native classes or functions;
  • Reversed game's structures;

可以使用Visual Studio 2022来开发插件:x86-64架构,__fastcall函数调用规范;本质上就是一个DLL。这里有个演示项目。用C++来开发吧,可以导出一个函数或类给脚本使用。开发好的插件须放在<game_directory>/red4ext/plugins目录或子目录下;如果你的插件依赖其他DLL,把它放在插件相同的目录下即可。

年后继续...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java 数据结构】String进阶

字符串常量池 1. 创建对象的思考2. 字符串常量池(StringTable)3. 再谈String对象创建 1. 创建对象的思考 下面两种创建String对象的方式相同吗&#xff1f; public static void main(String[] args) {String s1 "hello";String s2 "hello";String s3 …

前端ajax技术

ajax可以实现局部刷新&#xff0c;也叫做无刷新&#xff0c;无刷新指的是整个页面不刷新&#xff0c;只是局部刷新&#xff0c;ajax可以自己发送http请求&#xff0c;不用通过浏览器的地址栏&#xff0c;所以页面整体不会刷新&#xff0c;ajax获取到后台数据&#xff0c;更新页…

计算机毕业设计 | SSM超市进销存管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约&#xff0c;外国人迈克尔库伦开设了第一家合作商店&#xff0c;为了更好地吸引大量客流量&#xff0c;迈克尔库伦精心设计了低价策略&#xff0c;通过大量进货把商品价格压低&#xff0c;通过商店一次性集…

Nginx中logs的nginx.pid文件引发的问题

Nginx中logs的nginx.pid文件引发的问题 Q1&#xff1a;nginx: [error] CreateFile() "D:\software\nginx-1.22.1/logs/nginx.pid" failed (2: The system cannot find the file specified)Q2&#xff1a;nginx: [error] invalid PID number "" in "D:…

【flink状态管理(四)】MemoryStateBackend的实现

文章目录 1.基于MemoryStateBackend创建KeyedStateBackend1.1. 状态初始化1.2. 创建状态 2. 基于MemoryStateBackend创建OperatorStateBackend3.基于MemoryStateBackend创建CheckpointStorage 在Flink中&#xff0c;默认的StateBackend实现为MemoryStateBackend&#xff0c;本文…

掌握虚拟化与网络配置之道:深入浅出VMware及远程管理技巧

目录 虚拟机介绍 虚拟机的关键字 服务器架构的发展 为什么用虚拟机VMware 虚拟机和阿里云的区别 功能角度 价格因素 应用场景 优势方面 找到windows的服务管理 配置VMware 关于VMware安装的几个服务 vmware如何修改各种网络配置 关于NAT的详细信息(了解) NAT(网…

C语言——oj刷题——实现字符串逆序

当我们需要逆序一个字符串的内容时&#xff0c;可以通过C语言编写一个函数来实现。下面将详细介绍如何通过C语言实现这个功能&#xff0c;并附上代码示例。 1、实现原理 要逆序一个字符串的内容&#xff0c;可以使用两个指针来交换字符串中对应位置的字符。具体实现原理如下&am…

Ribbon全方位解析:构建弹性的Java微服务

第1章 引言 大家好,我是小黑,咱们今天聊聊Ribbon,这货是个客户端负载均衡工具,用在Spring Cloud里面能让咱们的服务调用更加灵活和健壮。负载均衡,听起来挺高大上的,其实就是把外界的请求平摊到多个服务器上,避免某个服务器压力太大,其他的却在那儿闲着。 Ribbon的牛…

Netty连接通道中的Channel参数模型

ChannelOption(Channel中的连接参数) ChannelOption.SOBACKLOG ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数&#xff0c;服务端处理客户端连接请求是顺序处理的&#xff0c;所以同一时间只能处理一个客户端连接&#xff0c;多个客户端来的时候&…

大数据领域的数据仓库

在大数据领域&#xff0c;数据仓库&#xff08;Data Warehouse&#xff09;是一个用于存储、管理和分析大量数据的集中式系统。它从多个异构数据源收集数据&#xff0c;对数据进行清洗、转换和整合&#xff0c;然后将其存储在一个集中的位置&#xff0c;以支持复杂的查询、报告…

Windows命令行设置IP地址

Windows命令行设置IP地址 一、常规设置IP的方法 开始-控制面板-网络连接-本地连接-属性-常规Internet协议&#xff0c;选择自动获取&#xff0c;或手动设置IP和DNS。 二、命令行设置IP的方法 2.1. netsh命令介绍 2.1.1. 设置动态获取IP地址和和自动获取DNS&#xff08;DHCP&a…

传输层协议 ——— TCP协议

TCP协议 TCP协议谈谈可靠性为什么网络中会存在不可靠&#xff1f;TCP协议格式TCP如何将报头与有效载荷进行分离&#xff1f;序号与确认序号 确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字…

使用ESP-01/ESP-01S接入Homekit远程控制电器

一、准备材料 ESP-01/ESP-01s 芯片 、 继电器模块 、 烧录器 二、下载固件和烧录软件 固件地址https://github.com/RavenSystem/esp-homekit-devices 烧录软件下载地址&#xff1a;https://drive.google.com/file/d/1_M4EzolaJWpYXts_FwUIqH8pZWqy-fye/view 三、烧录固件 …

基于gici多传感器融合定位的图优化代码学习

前言 本文是基于gici-open项目对因子图优化GraphC类 的学习&#xff0c;由于此项目的最小二乘估计部分采用了google的开源ceres库&#xff0c;可以从ceres的官方帮助文档处了解&#xff1a;Solving Non-linear Least Squares — Ceres Solver (ceres-solver.org) 在graph.h的…

springboot(ssm大学生计算机基础网络教学系统 在线课程系统Java系统

springboot(ssm大学生计算机基础网络教学系统 在线课程系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mys…

JavaScript事件

事件 事件-表单 元素获得焦点 onfocus&#xff1a; onfocus 事件在对象获得焦点时发生。鼠标点击获取焦点是发生 onblur&#xff1a; onblur 事件发生在对象失去焦点时&#xff0c;比如说你有个文本框&#xff0c;你鼠标点击进去&#xff0c;只有在离开的时候才会执行onblu…

【原创】Qt库open62541 MinGW编译

一、前言 为了统一公司的驱动层开发&#xff0c;准备采用OpcUA的方式转发底层数据&#xff0c;而服务器有Windows Server&#xff0c;也有CentOS&#xff0c;因此想用Qt开发一个基于MinGW的OpcUA Server&#xff0c;这样就能跨平台部署。这里记录一下&#xff0c;希望对你也有用…

Compose | UI组件(十五) | Scaffold - 脚手架

文章目录 前言一、Scaffold脚手架简介二、Scaffold的主要组件三、如何使用Scaffold四、Compose中Scaffold脚手架的具体例子例子1&#xff1a;基本Scaffold布局例子2&#xff1a;带有Drawer的Scaffold布局例子3&#xff1a;带有Snackbar的Scaffold布局 总结 前言 Compose中的Sca…

Python循环语句——for循环临时变量作用域

一、引言 在Python编程中&#xff0c;变量是程序运行的核心。其中&#xff0c;临时变量扮演着重要的角色&#xff0c;用于存储中间结果或临时数据。然而&#xff0c;这些临时变量并非随意存在&#xff0c;它们受到作用域的限制。了解临时变量的作用域对于编写高效、可维护的代…

神经网络 | 常见的激活函数

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要介绍神经网络中必要的激活函数的定义、分类、作用以及常见的激活函数的功能。 目录 一、激活函数定义 二、激活函数分类 三、常见的几种激活函数 1. Sigmoid 函数 &#xff08;1&#xff09;公式 &#xff08;2&a…