Skip to content

CSharpM7/lib_paramconfig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lib_paramconfig (nro)

For end-users, go to the releases tab and select the latest version. Make sure to disable the plugin when using other mods that hook param functions. For developers, keep reading.

A common problem across "single slot movesets"(SSMs) is that because they often hook the same functions, they will cause crashes when multiple SSMs are active at once. This plugin serves as a middleman between the source code and mods, so that even though multiple SSMs are active, this is the only plugin that actually hooks param functions.

Dependencies

lib_nrohook (install in your plugins folder, all end-users will need this as well)

Caution!

This can have adverse effects in casual modes, as well as with other external mechanics that attempt to edit parameters. This assumes you, and your target audience, are willing to risk the possibility of unintended consequences regarding SSMs, or have mitigated some of these possible unintended effects. This is also not compatible with any other gameplay modifying plugin that hooks param functions. Please make sure to disable this plugin before using such other mods/plugins.

Usage

All end-users will need to download an updated libparam_config.nro from the releases page (please do not bundle with your release as this plugin is still in its infancy). Create a file called config_param.toml and place it in the root of your mod (feel free to copy the one provided in the source code). Fill out the toml with the fighter kind of your mod, the slots that will be affected, and the common parameters you wish to modify.

Limitations

  • This also can only change int, float, and bool values. For bools, please use a param_int object with a value of 0 or 1.
  • Not all params will work (usually floats).
  • Currently, this does not support editing all parameters featured in vl.prc files (namely parameters with several arrays like MinMin's arms), though it does support most of the basic ones. Changing information like ledgegrab boxes and hurtboxes has gone untested (ledgegrab boxes can be altered via smashline), as well as several other vl.prc parameters.
  • Does not work with pocketed items or copy abilities

Toml Layout

kind = "mario" #~OPTIONAL~ The default kind for this toml. Any param that doesn't have a `kinds` value will default to this. This should be whatever comes after FIGHTER_KIND_. Ie "MARIO" or "mario"
slots = [0,1,...] #~OPTIONAL~ The default list of effected slots (alt costume numbers). Use -1 to apply to all costumes. Any param that doesn't have a `slots` value will default to this list

[[param_int]]
param = "param_fireball" #the cracked hash name found when viewing in prceditor
subparam = "life" #the cracked hash of the subcategory of this param. It might includes things like "life" or "angle"
value = 99 

[[param_int]] #a second param you wish to edit
param = "wall_jump_type" 
subparam = "" #note for fighter attributes, you often want to leave this blank
value = 0 #if you are working with a bool, use 0 for false, and 1 for true

[[attribute_mul]] #For fighter attributes (subparam=0) that are floats, you'll want to use a multiplier instead of setting the value directly
param = "jump_y" 
subparam = ""
value = 2.0 #This will make Dr Mario jump twice as high (regardless of his equipment)

[[attribute_mul]] #you can also get rid of this category if you are not editing floats. Same goes for ints
param = "0x607cd5541" #you can also use the raw hash version, as long as it begins with 0x
subparam = ""
value = 2.0

[[param_float]]
param = "param_fireball"
subparam = "gravity_accel"
value = 0.0
kinds = ["mario","mario_fireball"] #~OPTIONAL~ For weapons, I recommend including their weapon kind in the list as well
slots = [0,1,2] #~OPTIONAL~

[[param_int]]
param = "article_use_type" #For changing the use type of an article. Usually used for allowing entry/victory articles to spawn in game
value = 1
kinds = ["mariod_capsuleblock"]

[[param_int]]
param = "kirby_cant_copy" #Prevents Kirby from copying the ability of a fighter `kind` if they are using a costume in `slots`
value = 0

# The following params can use the below values as settings:
#0: Use original behavior
#1: Weapon is ignored
#2: Weapon is deleted upon hitting searchbox
#3: Weapon is deleted upon hitting searchbox, fighter enters their end/failed state

# The following functions are untested with the toml
[[param_int]]
param = "kirby_inhale_behavior" #Change the behavior of Kirby's inhale when this weapon kind (denoted by `subparam`) is involved (but only if the weapon's owner is of `kind` and using a costume in `slot`)
subparam = "koopajr_cannonball" #Kind of weapon involved. if you set this to "", then every weapon kind under the fighter/slot will be included
value = 2 #The cannonball will be deleted, but Kirby will continue to inhale

[[param_int]]
param = "villager_pocket_behavior" #Change the behavior of Villager, Isabelle, and Kirby's pocket special when this weapon kind (denoted by `subparam`) is involved (but only if the weapon's owner is of `kind` and using a costume in `slot`)
subparam = "koopajr_cannonball" #Kind of weapon involved. if you set this to "", then every weapon kind under the fighter/slot will be included
value = 3 #Villager will enter their failed state, and the cannonball will be deleted

[[param_int]]
param = "rosetta_pull_behavior" #Change the behavior of Rosalina's Gravitational Pull when this weapon kind (denoted by `subparam`) is involved (but only if the weapon's owner is of `kind` and using a costume in `slot`). param_config::WEAPON_INSTANCE_WORK_ID_FLAG_ROSETTA_PULLED will be set to true regardless of the behavior setting
subparam = "koopajr_cannonball" #Kind of weapon involved. if you set this to "", then every weapon kind under the fighter/slot will be included
value = 1 #Gravitational Pull will ignore Cannonball. Note that Rosa has no failstate, so using 3 here will act the same as using 2.

lib_paramconfig

lib_paramconfig also supports changes via your own skyline plugin. An example of this can be found here.

Setup

Your Cargo.toml needs to include this dependency: param_config = { git = "https://github.com/csharpm7/lib_paramconfig.git"}

Usage

param_config::update_int_2(kind: i32, slots: Vec<i32>,index: (u64,u64),value: i32);
param_config::update_float_2(kind: i32, slots: Vec<i32>,index: (u64,u64),value: f32);
param_config::update_attribute_mul_2(kind: i32, slots: Vec<i32>,index: (u64,u64),value: f32);

Kind: Fighter/Weapon kind, as commonly used like *FIGHTER_KIND_MARIOD. If it's a weapon, use a negative number.

Slots: Vector Array of slots

Index: (hash40(""),hash40("")) for param/subparam hashes. For common params, the second argument should be 0.

Value: Value for the param. Keep in mind that the _mul functions will multiply the original rather than set a new value.

param_config::disable_kirby_copy(kind: i32, slots: Vec<i32>)
param_config::set_article_use_type(kind: i32, use_type: i32)
param_config::set_kirby_inhale_behavior(kind: i32, slots: Vec<i32>, weapon_kind: i32, behavior: i32)
param_config::set_villager_pocket_behavior(kind: i32, slots: Vec<i32>, weapon_kind: i32, behavior: i32)
param_config::set_rosetta_pocket_behavior(kind: i32, slots: Vec<i32>, weapon_kind: i32, behavior: i32)

Weapon kind: Weapon Kind to prevent being pocketed. If this is 0, then all weapons spawned from kind/slots will be accounted for

Use_type: USETYPE const (ie *ARTICLE_USETYPE_FINAL);

Behavior: Use a param_config::POCKET_BEHAVIOR_... const as the argument. Details are located in the toml example. The rust analyzer will also provide you with the details of each constant as outlined in lib.rs.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors