Hookshot v2.1.0:用键鼠玩《时之笛》,把操控和画面调顺手

Hookshot v2.1.0支持在PC原生运行《时之笛》Switch 2版,提供鼠标视角控制、键盘映射、手柄布局预设、体感瞄准、文字/菜单缩放、渲染分辨率与FSR 3.1等图形设置。本文详解鼠标镜头模式(Native/As the stick)、按键重映射、Motion陀螺仪校准、Text size/Text speed调节、Output/Render分辨率分离配置及Vulkan 1.3硬件要求,聚焦提升键鼠操作体验与画面适配性。

Hookshot v2.1.0:用键鼠玩《时之笛》,把操控和画面调顺手

想在电脑上体验《塞尔达传说:时之笛》Switch 2 版,Hookshot 提供了一条民间原生运行路线。对习惯 PC 的玩家,更有意思的是它给出了原生鼠标视角、菜单鼠标操作、按键映射和屏幕适配。把这些选项调顺手,才容易留在游戏里继续探索。

这篇围绕 v2.1.0 的游戏设置展开:先把键鼠操作安排好,再看手柄、字号和画面。首次准备放在文末集中说明,已经能进入游戏的读者,可以直接从第一节开始。

让鼠标直接控制视角

进入游戏后按 F1 或 Insert 打开附加菜单,切换到 Controls,找到 Mouse camera。默认的 As the stick 把鼠标当右摇杆;选择 Native,鼠标与镜头转动一对一对应,更贴近常见 PC 游戏的转视角方式。两种模式可以自己比较,选更习惯的那种。

鼠标视角还有一个搭配项:Disable camera centering。设为 On 后,行走时逐渐回正的镜头动作会停止,主动看向侧面时就不容易被拉回去。手动回正、剧情镜头和自动俯仰仍有自己的行为,这个开关调整的是行走时的自动朝向。

Mouse sensitivity 用于调整灵敏度,Invert mouse vertical 决定上下方向是否反转。游戏中也可用减号和等号改变鼠标灵敏度。先选一种转视角模式,再调到自己能轻松停在目标位置的速度,探索和观察场景时会更顺手。

如果同时改变模式、灵敏度和反转方向,很容易分不清自己更喜欢哪种感觉。实际设置时,不妨先确定 Native 或 As the stick,再试上下方向,最后微调灵敏度。这里没有适合所有人的统一数值,鼠标速度与个人习惯都不同。

把常用动作放到顺手的键

默认 WASD 移动,方向键或 IJKL 转动镜头;标题画面默认按 E 选择 New Game。需要改键时,进入 Controls 页内的 Controls,选中目标动作与 Keyboard 一列,按 Enter,再按想使用的新键。Esc 取消本次操作,Delete 清除映射,Reset to defaults 恢复默认。

鼠标视角与键位映射可以配合安排。方向和镜头交给两只手后,常用动作留在容易够到的位置。修改会保存在 hookshot_options.ini,平时通过菜单调整即可,不需要为了换几个按键先手写配置文件。

Windows 下,游戏自身的许多菜单也接受鼠标。物品、地图、暂停和存档页面可以点击,左键确认、右键返回;滚轮可翻页、滚动列表,在地图上还可切换楼层与缩放。左键拖动能平移地图,操作对象与场景内转视角有所区别。

拿手柄时,光标不会一直留在画面里;移动鼠标后才出现。这让键鼠与手柄各自保留了合适的操作方式,想临时用鼠标找地图上的位置,也不用把整套控制重新设置一遍。

常用手柄与体感怎么选

Layout preset 可以切换 Nintendo、Xbox/PC 等布局。Nintendo 的 A 在右侧,Xbox/PC 的 A 在底部,菜单确认与返回也要按当前布局理解。习惯 Xbox 位置的玩家,可以先选对应预设,再考虑个别动作是否需要调整。

手柄改键仍在控制映射页,选择 Gamepad 一列操作。一个按钮被其他动作占用时,映射会与原动作交换;改完看一眼相邻动作,避免把常用按钮不知不觉换走。摇杆死区也有多档,适合按手柄是否漂移、轻推时是否容易控制来选择。

Motion 页面给带陀螺仪的手柄提供体感瞄准,文档列出了 Switch Pro、Switch 模式手柄、DualSense 和 DualShock 4。Motion sensitivity X/Y 分别调左右和上下幅度,Invert motion X/Y 改变对应方向。觉得准星慢慢偏移时,可以让手柄在桌上静置一会,帮助学习漂移。

震动强度可以单独调整或关闭。Switch Pro 和 Joy-Con 的 HD 震动另有 SDL3、平台与设备条件,第三方手柄也可能表现不同。普通双马达震动仍有支持,不需要把某一种附加震动能力当作使用手柄的前提。

对话与菜单先调到看得舒服

Gameplay 的 Text size 可以放大对话、Navi 提示和路牌文字,最高为原来的 175%;Menu size 的 Small、Medium、Large,则调整附加菜单、帧率显示与启动画面。接电视时,可以分别把这两项调大,不用为了看字而连整个桌面缩放一起改。

Text speed 提供正常、两倍、四倍和即时显示。它适合按阅读习惯选择:想保留逐字出现的节奏就保持正常,重看熟悉内容时可以加快。文字大小和文字出现速度解决的是两个问题,可以分开选择。

Audio output 可选 Auto、Stereo 或 5.1。Auto 按默认输出设备决定,桌面音箱、耳机与客厅多声道设备可以各用适合的方案;另有整体音量和后台静音。设置时先按自己实际使用的设备来,不必因为菜单提供了更多声道就选最高一项。

让画面适合这块显示器

Graphics 中,Output resolution 决定含界面文字的整幅图像尺寸;Render resolution 决定三维场景内部渲染尺寸。想让全屏文字清楚,可以先选接近显示器的输出分辨率,再按显卡余量调整内部渲染比例或质量预设。

宽屏用户可以结合输出分辨率尝试 Ultrawide 的 Monitor’s shape,让镜头按屏幕形状适配。菜单里还可调各向异性过滤,主要影响斜着看过去的地面、道路等纹理;这些选项比单纯追求最大的分辨率更适合逐项观察。

FSR 3.1 随每个构建提供。DLSS、DLAA 另需 NVIDIA SDK 构建和 RTX 硬件,菜单会按能力显示部分项目。质量预设会调整一组画面和显存预算,却保留原先选择的缩放算法与帧生成,改档后可以再看一下这两项。

帧生成能增加显示画面,但有延迟和运动伪影的取舍。先保持游戏帧率上限 60,体验基本操作,再决定要不要开启帧生成;超过 60 的游戏上限仍可能影响部分剧情和首领行为。选项旁标注重启后生效时,保存进度再重启即可。

手柄也能打开这个附加菜单:Home,或 Select 与 Start 组合;DualShock 4、DualSense 可点击触摸板。进入后能用方向键选行、改值,再用返回键退回。键盘玩家则可以用 Q、E 或 Tab 切页。临时想换字号或音量时,不必先退出游戏,按自己正在用的设备操作就好。

第一次进入游戏的准备

Hookshot 是非官方项目,需要自备支持版本游戏,不附游戏或密钥。当前接受 .nup 或 romfs、exefs 目录,对应程序 0400486024DEC000、更新 v131072、构建 e0f3ccfa。Windows 运行 HookshotBuilder.exe,选游戏、目标目录和语言,点击 Build the game,完成后 Play;Linux 给 x86_64 AppImage 执行权限,打开后选输入、目录与语言,点击 Build。

系统为 64 位 Windows 10/11,或 glibc 至少 2.35 的 64 位 Linux,Linux AppImage 需要 AVX2。显卡须具备 Vulkan 1.3 与网格着色器,建议 8GB 显存、16GB 内存,首次处理预留约 60GB。Windows 入口会联网下载约 500MB 工具,官方估计处理约 10 至 45 分钟,首次启动另有着色器准备。

项目仍实验性,部分设备与场景有已知问题。更新前另存一份进度,Windows 在游戏目录 user,Linux 在 ~/.local/share/hookshot;后续更新可从启动器 Update 进入。准备完成后,先把鼠标视角、确认键与文字大小调好,这些会直接影响接下来每一次移动、翻图和读对话。

获取方式

百度网盘:https://pan.baidu.com/s/1ZLevaVh4ChvcpE3nVZmQ3g?pwd=h7tf 提取码:h7tf

夸克网盘:https://pan.quark.cn/s/8da8b5e943a9

项目参考:Hookshot。

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值