in this topic (when finished), i will post what i know about reagents, what file they are located in, and what changing each value does (again, when i get around to it)
to use this tutorial, you need to know how to use a tank viewer, and know where to find one for ds2.
inside \resources\logic.ds2res
world\contentdb\reagents.gas
[reagent_test] 'name of reagent in code
{
object_types = weapon; // Can be any of the pcontent base or specfic types.
skill_types = fighter; // fighter, ranger, mage, nmage, cmage
[strength]
{
alteration = alter_strength; 'used to select which stat to modify with value
value = 1; 'ammount to alter selected stat
min_value_ceiling = 5; 'unknown
description = "+<value> Strength"; 'the text string with <value> replaced with what value equals
duration = #infinite; 'used to set duration of modification. for permenent reagents, this is infinite. for spells and hexes, the duration is a formula with more variables
is_permanent = true; 'used as 2nd step of a 2 step verify that the modification is permanent
is_single_instance = false; 'unknown
custom_effect = "rgt_strength"; // must be unique to effect
custom_effect_skrit = world\global\enchantments\weapon_enchant.skrit 'function to call for graphics
?weapon_ffx = ffx_spell_str_bonus_sword 'graphics for swords
&projectile_ffx = ffx_spell_str_bonus_arrow; 'graphics for bows
}
}
now, for an actual item:
[reagent_nettle_cluster]
{
object_types = armor,ring,amulet,spellbook; ' listing of objects allowed to use item
skill_types = fighter,ranger,nmage,cmage; 'listing of character types that can equip this reagent
[health]
{
alteration = alter_max_life; 'selected stat that is to be modified
value = 10; 'value of modification
description = "+<value> Health"; 'text string of modification that is displayed in-game to the player
duration = #infinite; 'duration of modification
is_permanent = true; '2nd step of a 2 step confirmation that duration is infinite
is_single_instance = false; 'unknown
custom_effect = "rgt_health"; // must be unique to effect 'effect found in skirt
custom_effect_skrit = world\global\enchantments\weapon_enchant.skrit; 'skirt that effect is found in
}
}
now for multiple modifiers:
[reagent_viperclaw]
{
object_types = ranged;
skill_types = ranger;
[ranged_damage_min] 'first mod starts here
{
alteration = alter_ranged_damage_min;
value = 50;
description = "+<value> Min Damage";
duration = #infinite;
is_permanent = true;
is_single_instance = false;
custom_effect = "rgt_ranged_min"; // must be unique to effect
custom_effect_skrit = world\global\enchantments\weapon_enchant.skrit
?projectile_ffx = ffx_spell_damage_bonus_arrow;
}
[ranged_damage_max] 'second mod starts here
{
alteration = alter_ranged_damage_max;
value = 50;
description = "+<value> Max Damage";
duration = #infinite;
is_permanent = true;
is_single_instance = false;
custom_effect = "rgt_ranged_max"; // must be unique to effect
custom_effect_skrit = world\global\enchantments\weapon_enchant.skrit;
}
[ranged_death_damage] 'third mod starts here
{
alteration = alter_custom_damage_death;
value = 25;
max_value = 75; 'max value is for a range of damage, aka 25 to 75 damage, unknown if value may be used for non-elemental damage
description = "Adds <value> to <max_value> Death Damage";
duration = #infinite;
is_permanent = true;
is_single_instance = false;
custom_effect = "rgt_death"; // must be unique to effect
custom_effect_skrit = world\global\enchantments\weapon_enchant.skrit
?projectile_ffx = ffx_spell_death_arrow;
}
}
/me points to world\contentdb\templates\interactive\rgt_reagents.gas for more information on reagents.
from that file (thanks sharkskull):
[t:template,n:base_reagent]
{
doc = "base reagent template";
specializes = reagent;
category_name = "reagents";
[aspect]
{
model = m_i_glb_key-01; 'model used when item is on ground
[voice]
{
[put_down]
{
* = s_ui_2d_jewelry_putdown; 'sound used when put on ground/inventory
}
}
}
[common]
{
allow_modifiers = false; 'interesting... guess reagents can have magical modifiers just like jewels in diablo 2 (reagent = socketable item)
screen_name = "Base Reagent"; 'text string displayed to the player
}
[gui]
{
inventory_icon = b_gui_ig_i_it_rune_001; 'icon used when item is in inventory
inventory_height = 1; 'height of item
inventory_width = 1; 'width of item
item_level = 1; 'level item is avaliable to spwan
}
[magic]
{
// <enchantment description>
reagent_definition = reagent_test; 'used to point to [reagent_definitions] in world\contentdb\reagents.gas
}
}
now for a real item:
[t:template,n:rgt_pine_splinter]
{
doc = "pine splinter";
specializes = base_reagent; 'defines base reagent to use, since all of them use this allowing magic modifiers on reagents might just filter down to the item, because of "if value is not mentioned, assume previous"
[aspect]
{
model = m_i_glb_rgt_pine_splinter; 'model used when item is displayed on the ground
[voice]
{
[put_down]
{
* = s_ui_inv_place_rgnt_shard; 'sound used when put on ground/inventory
}
}
}
[common]
{
screen_name = "Pine Splinter"; 'text string displayed to the player in-game
description = "Can enchant weapons, armor, shields, rings, and amulets.\n"; 'text string displayed to the player in-game, \n functions as a carage return (thanks Lady Femme)
}
[gui]
{
inventory_icon = b_gui_ig_i_it_rgt_pine_splinter; 'inventory icon displayed to the player in-game
inventory_height = 1; 'height of the item
inventory_width = 1; 'width of the item
item_level = 5; 'level item is available to spwan
}
[magic]
{
reagent_definition = reagent_pine_splinter; 'used to point to [reagent_definitions] in world\contentdb\reagents.gas
}
}
the \n functions like a carriage return; it tells the game to go to the next line when displaying stuff, so if the description reads:
"Can enchant weapons, armor, shields, rings, and amulets.\nCan only be enchanted on exceptional items."
it will be displayed in game as:
Can enchant weapons, armor, shields, rings, and amulets.
Can only be enchanted on exceptional items.