feat(increase climb height)

This commit is contained in:
GetParanoid 2025-07-18 16:05:58 -05:00
parent 1854d79d07
commit ccea395b0b
6 changed files with 236 additions and 0 deletions

View file

@ -0,0 +1,42 @@
Here are the game's defaults with my experience tweaking them:
"InteractMaxHeight": 1.31,
This one setting is 99% of the mod. It's the height a climb will be attempted. You could bump this up to make things feel more grippy, but how high your character moves up won't change.
"InteractMaxLength": 10,
This is how close in front of you a wall needs to be to attempt a climb. I left this at default. It didn't help get to more ledges because where you climb up to does not go further out.
"MinDistantToInteract": 0.5,
IDK what this does but was with the other two. Didn't notice any effect.
"BaseJumpPenalty": 0.3,
Inertia penalty for jumping. I set this to 0 for off.
"MaxOneHandAnimationHeight": 2.3,
How high a the one handed climb animation transitions into a two handed climb. One hands are slightly faster, so this could be boosted, but wouldn't above 3.5. I left this at default.
"MaxWithoutHandHeight": 0.65,
How high you can do a no-handed step up. I left this at default. Looks wonky past 2
"VaultingInputTime": 0.5,
I didn't notice an effect lowering this to 0. I could still vault as quick as I could press a key.
"AnimationVerticalSpeed": 1.1,
"AnimationForwardSpeed": 0.8,
How fast you climb. Left at default. Adjust .1 at a time.
"GridOffsetX": 0,
"GridOffsetY": 0,
"GridOffsetZ": 0,
"GridSizeX": 0,
"GridSizeY": 1.8,
"GridSizeZ": 2,
"OffsetFactor": 0.1,
"SteppingLengthX": 0.1,
"SteppingLengthY": 0.1,
"SteppingLengthZ": 0.1
Everything above is under "Grid Settings". I tweaked these settings, but it was hard to tell what was happening.
I didn't notice any effect except making the grid too small or large prevents you from climbing. Left all at defaults.

View file

@ -0,0 +1,26 @@
{
"InteractMaxHeight": 1.72,
"InteractMaxLength": 10,
"MinDistantToInteract": 0.5,
"BaseJumpPenalty": 0,
"MaxOneHandAnimationHeight": 2.3,
"MaxWithoutHandHeight": 0.65,
"VaultingInputTime": 0.5,
"AnimationVerticalSpeed": 1.1,
"AnimationForwardSpeed": 0.8,
"GridOffsetX": 0,
"GridOffsetY": 0,
"GridOffsetZ": 0,
"GridSizeX": 0,
"GridSizeY": 1.8,
"GridSizeZ": 2,
"OffsetFactor": 0.1,
"SteppingLengthX": 0.1,
"SteppingLengthY": 0.1,
"SteppingLengthZ": 0.1
}

View file

@ -0,0 +1,32 @@
{
"name": "Increase Climb Height",
"version": "1.2.0",
"sptVersion": "~3.11",
"loadBefore": [],
"loadAfter": [],
"incompatibilities": [],
"isBundleMod": false,
"main": "src/mod.js",
"scripts": {
"setup": "npm i",
"build": "node ./build.mjs",
"buildinfo": "node ./build.mjs --verbose"
},
"devDependencies": {
"@types/node": "20.11",
"@typescript-eslint/eslint-plugin": "7.2",
"@typescript-eslint/parser": "7.2",
"archiver": "^6.0",
"eslint": "8.57",
"fs-extra": "11.2",
"ignore": "^5.2",
"tsyringe": "4.8.0",
"typescript": "5.4",
"winston": "3.12"
},
"author": "redlaser42",
"contributors": [],
"license": "MIT",
"dependencies": {
}
}

View file

@ -0,0 +1,58 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mod = void 0;
const config_json_1 = __importDefault(require("./../config.json"));
const cfMaxLength = config_json_1.default.InteractMaxLength;
const cfMaxHeight = config_json_1.default.InteractMaxHeight;
const cfMinDistantToInteract = config_json_1.default.MinDistantToInteract;
const cfMaxOneHandHeight = config_json_1.default.MaxOneHandAnimationHeight;
const cfMaxWithoutHandHeight = config_json_1.default.MaxWithoutHandHeight;
const cfBaseJumpPenalty = config_json_1.default.BaseJumpPenalty;
const cfVaultingInputTime = config_json_1.default.VaultingInputTime;
const cfSpeedRangeX = config_json_1.default.AnimationForwardSpeed;
const cfSpeedRangeY = config_json_1.default.AnimationVerticalSpeed;
const cfGridOffsetX = config_json_1.default.GridOffsetX;
const cfGridOffsetY = config_json_1.default.GridOffsetY;
const cfGridOffsetZ = config_json_1.default.GridOffsetZ;
const cfGridSizeX = config_json_1.default.GridSizeX;
const cfGridSizeY = config_json_1.default.GridSizeY;
const cfGridSizeZ = config_json_1.default.GridSizeZ;
const cfOffsetFactor = config_json_1.default.OffsetFactor;
const cfSteppingLengthX = config_json_1.default.SteppingLengthX;
const cfSteppingLengthY = config_json_1.default.SteppingLengthY;
const cfSteppingLengthZ = config_json_1.default.SteppingLengthZ;
class Mod {
postDBLoad(container) {
// get database from server
const databaseServer = container.resolve("DatabaseServer");
// Get all the in-memory json found in /assets/database
const tables = databaseServer.getTables();
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MoveRestrictions.MaxLength = cfMaxLength;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MoveRestrictions.MaxHeight = cfMaxHeight;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MoveRestrictions.MinDistantToInteract = cfMinDistantToInteract;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.AutoMoveRestrictions.MaxLength = cfMaxLength;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.AutoMoveRestrictions.MaxHeight = cfMaxHeight;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.AutoMoveRestrictions.MinDistantToInteract = cfMinDistantToInteract;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.SpeedRange.x = cfSpeedRangeX;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.SpeedRange.y = cfSpeedRangeY;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MaxOneHandHeight = cfMaxOneHandHeight;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MaxWithoutHandHeight = cfMaxWithoutHandHeight;
tables.globals.config.Inertia.BaseJumpPenalty = cfBaseJumpPenalty;
tables.globals.config.VaultingSettings.GridSettings.SteppingLengthY = cfSteppingLengthY;
tables.globals.config.VaultingSettings.GridSettings.SteppingLengthX = cfSteppingLengthX;
tables.globals.config.VaultingSettings.GridSettings.SteppingLengthZ = cfSteppingLengthZ;
tables.globals.config.VaultingSettings.GridSettings.GridOffsetY = cfGridOffsetY;
tables.globals.config.VaultingSettings.GridSettings.GridOffsetX = cfGridOffsetX;
tables.globals.config.VaultingSettings.GridSettings.GridOffsetZ = cfGridOffsetZ;
tables.globals.config.VaultingSettings.GridSettings.GridSizeY = cfGridSizeY;
tables.globals.config.VaultingSettings.GridSettings.GridSizeX = cfGridSizeX;
tables.globals.config.VaultingSettings.GridSettings.GridSizeZ = cfGridSizeZ;
tables.globals.config.VaultingSettings.GridSettings.OffsetFactor = cfOffsetFactor;
tables.globals.config.VaultingSettings.VaultingInputTime = cfVaultingInputTime;
}
}
exports.mod = new Mod();
//# sourceMappingURL=mod.js.map

View file

@ -0,0 +1,10 @@
{
"version": 3,
"file": "mod.js",
"sourceRoot": "",
"sources": [
"mod.ts"
],
"names": [],
"mappings": "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"
}

View file

@ -0,0 +1,68 @@
import { DependencyContainer } from "tsyringe";
import { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod";
import { DatabaseServer } from "@spt/servers/DatabaseServer";
import { IDatabaseTables } from "@spt/models/spt/server/IDatabaseTables";
import config from "./../config.json";
const cfMaxLength = config.InteractMaxLength;
const cfMaxHeight = config.InteractMaxHeight;
const cfMinDistantToInteract = config.MinDistantToInteract;
const cfMaxOneHandHeight = config.MaxOneHandAnimationHeight;
const cfMaxWithoutHandHeight = config.MaxWithoutHandHeight;
const cfBaseJumpPenalty = config.BaseJumpPenalty;
const cfVaultingInputTime = config.VaultingInputTime;
const cfSpeedRangeX = config.AnimationForwardSpeed;
const cfSpeedRangeY = config.AnimationVerticalSpeed;
const cfGridOffsetX = config.GridOffsetX;
const cfGridOffsetY = config.GridOffsetY;
const cfGridOffsetZ = config.GridOffsetZ;
const cfGridSizeX = config.GridSizeX;
const cfGridSizeY = config.GridSizeY;
const cfGridSizeZ = config.GridSizeZ;
const cfOffsetFactor = config.OffsetFactor;
const cfSteppingLengthX = config.SteppingLengthX;
const cfSteppingLengthY = config.SteppingLengthY;
const cfSteppingLengthZ = config.SteppingLengthZ;
class Mod implements IPostDBLoadMod {
public postDBLoad(container: DependencyContainer): void {
// get database from server
const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
// Get all the in-memory json found in /assets/database
const tables: IDatabaseTables = databaseServer.getTables();
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MoveRestrictions.MaxLength = cfMaxLength;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MoveRestrictions.MaxHeight = cfMaxHeight;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MoveRestrictions.MinDistantToInteract = cfMinDistantToInteract;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.AutoMoveRestrictions.MaxLength = cfMaxLength;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.AutoMoveRestrictions.MaxHeight = cfMaxHeight;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.AutoMoveRestrictions.MinDistantToInteract = cfMinDistantToInteract;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.SpeedRange.x = cfSpeedRangeX;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.SpeedRange.y = cfSpeedRangeY;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MaxOneHandHeight = cfMaxOneHandHeight;
tables.globals.config.VaultingSettings.MovesSettings.ClimbSettings.MaxWithoutHandHeight = cfMaxWithoutHandHeight;
tables.globals.config.Inertia.BaseJumpPenalty = cfBaseJumpPenalty;
tables.globals.config.VaultingSettings.GridSettings.SteppingLengthY = cfSteppingLengthY;
tables.globals.config.VaultingSettings.GridSettings.SteppingLengthX = cfSteppingLengthX;
tables.globals.config.VaultingSettings.GridSettings.SteppingLengthZ = cfSteppingLengthZ;
tables.globals.config.VaultingSettings.GridSettings.GridOffsetY = cfGridOffsetY;
tables.globals.config.VaultingSettings.GridSettings.GridOffsetX = cfGridOffsetX;
tables.globals.config.VaultingSettings.GridSettings.GridOffsetZ = cfGridOffsetZ;
tables.globals.config.VaultingSettings.GridSettings.GridSizeY = cfGridSizeY;
tables.globals.config.VaultingSettings.GridSettings.GridSizeX = cfGridSizeX;
tables.globals.config.VaultingSettings.GridSettings.GridSizeZ = cfGridSizeZ;
tables.globals.config.VaultingSettings.GridSettings.OffsetFactor = cfOffsetFactor;
tables.globals.config.VaultingSettings.VaultingInputTime = cfVaultingInputTime;
}
}
export const mod = new Mod();